[英]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'])
我會結合使用agg
和eval
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.