簡體   English   中英

Python Pandas Group Dataframe按列/ Sum Integer列按String列

[英]Python Pandas Group Dataframe by Column / Sum Integer Column by String Column

我整日都被困住了,讀了很多SO文章,但仍然停留在我最后的最后一篇文章中。 我將CSV導入了一個龐大的數據框,然后最終得到了下面的較小數據框:(注意:我的df現在在“名稱”上建立了索引,這是我需要根據組或求和的基礎)

  Name          Classification       Value 1     Value 2
Company 1   Classification Code 1      5000       8000      
Company 1   Classification Code 1      6000       2000
Company 2   Classification Code 1      2000       3000    
Company 2   Classification Code 1      1000       4500     
Company 3   Classification Code 2      15000      10000      
Company 3   Classification Code 2      20000      32000     
Company 4   Classification Code 3      7500       10000    
Company 4   Classification Code 3      7000       1500     

我現在正在努力的是如何基於公司對兩個值求和(我主要使用groupby和sum(),但是已經停滯了幾個小時。我知道有很多關於在熊貓中對事物求和的SO文章。但我已經好幾個小時沒有運氣了,我們將不勝感激,非常感謝。

編輯:我正在尋找的輸出如下

Company 1    Classification Code 1    11,000    10,000
Company 2    Classification Code 1    3,000      7,500
Company 3    Classification Code 2    35,000    42,000
Company 4    Classification Code 3    14,500    11,500

選項1
set_index然后groupby
這假定'Classification'列是相同的跨Company

df.set_index('Classification', append=True) \
    .groupby(level=[0, 1]).sum().reset_index(1)

                  Classification  Value 1  Value 2
Name                                              
Company 1  Classification Code 1    11000    10000
Company 2  Classification Code 1     3000     7500
Company 3  Classification Code 2    35000    42000
Company 4  Classification Code 3    14500    11500

選項2
groupby然后agg
這不會對'Company''Classification'唯一性做出任何假設,而只會獲取每個'Company'的第一個'Classification' 'Company'

df.groupby(level=0).agg(
    {'Classification': 'first', 'Value 1': 'sum', 'Value 2': 'sum'})

                  Classification  Value 1  Value 2
Name                                              
Company 1  Classification Code 1    11000    10000
Company 2  Classification Code 1     3000     7500
Company 3  Classification Code 2    35000    42000
Company 4  Classification Code 3    14500    11500

對評論的回應
關於串聯
檢查dtypesdf.dtypes 如果看到object而不是int則是,您需要轉換為numeric

您可以簡單地通過

df.apply(pd.to_numeric, errors='ignore').groupby(level=0).agg(
    {'Classification': 'first', 'Value 1': 'sum', 'Value 2': 'sum'})

或更手動

df['Value 1'] = df['Value 1'].astype(int)
df['Value 2'] = df['Value 2'].astype(int)

然后繼續進行先前的建議。

關於列的放置
您可以隨時對列進行重新排序

d1 = df.apply(pd.to_numeric, errors='ignore').groupby(level=0).agg(
    {'Classification': 'first', 'Value 1': 'sum', 'Value 2': 'sum'})

d1[df.columns]

要么

d1 = df.apply(pd.to_numeric, errors='ignore').groupby(level=0).agg(
    {'Classification': 'first', 'Value 1': 'sum', 'Value 2': 'sum'})

d1.reindex_axis(df.columns, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM