簡體   English   中英

使用groupby時如何在一個熊貓中用一個函數聚合多列?

[英]How do I aggregate multiple columns with one function in pandas when using groupby?

我有一個帶有“組”變量,“計數”變量和“總計”變量的數據框。 對於每個組,我想對計數列求和,然后將其除以總計列的總和。 我如何做到這一點,最好是在一行代碼中?

這是一個使用示例:

test_dc = {1:{'group':'A','cnt':3,'total':5},
           2:{'group':'B','cnt':1,'total':8},
           3:{'group':'A','cnt':2,'total':4},
           4:{'group':'B','cnt':6,'total':13}
          }
test_df = pd.DataFrame.from_dict(test_dc, orient='index')

預期輸出(大致):

group | average
    A | 0.55555
    B | 0.33333

編輯:將列名從“ count”更改為“ cnt”,因為groupby對象上似乎存在一個count()方法。

您可以使用DataFrame.groupby對一列進行分組,然后在該列上調用sum以獲取總和。

>>> df = test_df
    .groupby('group')
    .sum()
>>> df      
       count  total
group              
A          5      9
B          7     21

然后,您可以抓住專欄並將其分開以獲得答案。

>>> df['count'] / df['total']
    group
A    0.555556
B    0.333333
dtype: float64

您可以利用DataFrame.pipe運算符在一行中完成此操作:

test_df
    .groupby('group')
    .sum()
    .pipe(lambda df: df['count'] / df['total'])

我會結合使用aggeval

test_df.groupby('group').agg('sum').eval('cnt / total')

group
A    0.555556
B    0.333333
dtype: float64

暫無
暫無

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

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