[英]how to groupby-apply-aggregate back to a dataframe in Python Pandas?
def my_per_group_func(temp):
# apply some tricks here
return a, b, c, d
output = dataframe.groupby('group_id').apply(my_per_group_func)
我的問題是如何將“輸出”聚合回具有某些列名的數據框(顯然數據框的索引是 group_id)?
通常我所做的是使用聚合函數
但這里的問題是 my_per_group_func 在這里非常復雜,不能使用通常的“聚合”函數語法來完成
有人有線索嗎?
謝謝
似乎需要返回DataFrame
或Series
- 檢查靈活的應用文檔:
dataframe = pd.DataFrame({'group_id':[1,1,3],
'B':[4,5,6],
'C':[7,8,9],
'D':[1,3,5],
'E':[5,3,6],
'F':[7,4,3]})
print (dataframe)
B C D E F group_id
0 4 7 1 5 7 1
1 5 8 3 3 4 1
2 6 9 5 6 3 3
def my_per_group_func(x):
#print (x)
#some sample operations
a = x.B + x.C
b = x.E + x.B
c = x.D + x.F
d = x.F + x.E
return pd.DataFrame({'group_id': x.group_id, 'a':a, 'b':b, 'c':c, 'd':d})
output = dataframe.groupby('group_id').apply(my_per_group_func)
print (output)
a b c d group_id
0 11 9 8 12 1
1 13 8 7 7 1
2 15 12 8 9 3
def my_per_group_func(x):
#print (x)
#some sample aggregations
a = (x.B + x.C).mean()
b = (x.E + x.B).sum()
c = (x.D + x.F).median()
d = (x.F + x.E).std()
return pd.Series([a,b,c,d], index=['a','b','c','d'])
output = dataframe.groupby('group_id').apply(my_per_group_func)
print (output)
a b c d
group_id
1 12.0 17.0 7.5 3.535534
3 15.0 12.0 8.0 NaN
dataframe['new column name'] = dataframe.groupby('group_id').transform(my_per_group_func)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.