使用GROUPBY apply
,並返回一個系列重命名列
使用GROUPBY apply
方法來執行
- 重命名列
- 在名稱
- 允許允許對空間的聚合您以任何您選擇的方式訂購返回的列
- 允許在列之間進行交互
- 返回單級索引而不是一個多指標
要做到這一點:
- 創建您傳遞給
apply
- 此自定義函數傳遞每個組的數據框自定義函數
- 迴歸系列
- 該系列的索引將是新的列
個
製造假數據
df = pd.DataFrame({"User": ["user1", "user2", "user2", "user3", "user2", "user1", "user3"],
"Amount": [10.0, 5.0, 8.0, 10.5, 7.5, 8.0, 9],
'Score': [9, 1, 8, 7, 7, 6, 9]})
創建返回
變量x
系列裏面的my_agg
是一個數據幀
def my_agg(x):
names = {
'Amount mean': x['Amount'].mean(),
'Amount std': x['Amount'].std(),
'Amount range': x['Amount'].max() - x['Amount'].min(),
'Score Max': x['Score'].max(),
'Score Sum': x['Score'].sum(),
'Amount Score Sum': (x['Amount'] * x['Score']).sum()}
return pd.Series(names, index=['Amount range', 'Amount std', 'Amount mean',
'Score Sum', 'Score Max', 'Amount Score Sum'])
自定義函數
通過這個自定義函數的GROUPBY apply
方法
df.groupby('User').apply(my_agg)
最大的缺點是,這個功能會比agg
爲cythonized aggregations
慢得多使用帶進行分組的字典agg
方法
使用詞典詞典由於其複雜性和有點模糊的性質,因此被刪除。有一個ongoing discussion關於如何在github上將來改進此功能在這裏,您可以在groupby調用之後直接訪問聚合列。只需傳遞您希望應用的所有聚合函數的列表。
df.groupby('User')['Amount'].agg(['sum', 'count'])
輸出
sum count
User
user1 18.0 2
user2 20.5 3
user3 10.5 1
但仍可以用字典來明確表示不同的聚合的不同列,喜歡這裏,如果有一個名叫Other
另一個數字列。
df = pd.DataFrame({"User": ["user1", "user2", "user2", "user3", "user2", "user1"],
"Amount": [10.0, 5.0, 8.0, 10.5, 7.5, 8.0],
'Other': [1,2,3,4,5,6]})
df.groupby('User').agg({'Amount' : ['sum', 'count'], 'Other':['max', 'std']})
輸出
Amount Other
sum count max std
User
user1 18.0 2 6 3.535534
user2 20.5 3 5 1.527525
user3 10.5 1 4 NaN
我很想知道這是爲什麼正在貶值(我敢肯定有一個很好的理由)。有沒有人有鏈接到它的討論? –