【发布时间】:2015-01-03 14:01:03
【问题描述】:
我想根据 'id' 对以下数据框进行分组,然后将除 0 之外的所有 'id' 值的 'flow' 总和;那些应该保持独立。最好的解决方案是什么?
原文:
id flow
0 1
0 1
1 1
1 1
2 1
2 1
聚合:
id flow
0 1
0 1
1 2
2 2
【问题讨论】:
标签: python pandas aggregation
我想根据 'id' 对以下数据框进行分组,然后将除 0 之外的所有 'id' 值的 'flow' 总和;那些应该保持独立。最好的解决方案是什么?
原文:
id flow
0 1
0 1
1 1
1 1
2 1
2 1
聚合:
id flow
0 1
0 1
1 2
2 2
【问题讨论】:
标签: python pandas aggregation
一种方法是使用transform 重新分配新的流值,然后删除重复项:
In [48]:
df.loc[df['id'] != 0, 'flow'] = df.groupby('id')['flow'].transform('sum')
df.drop(df[df['id']!=0].drop_duplicates().index)
Out[48]:
id flow
0 0 1
1 0 1
3 1 2
5 2 2
【讨论】:
您可以将其分解为一个问题,即您通过除 0 之外的所有 id 进行分组,然后仅附加 0 的值。即
df = DataFrame({"id":[0,0,1,1,2,2],"flow":[1,1,1,1,1,1]})
df1 = df[df["id"]!=0].groupby('id').sum().reset_index()
pd.concat([df[df['id']==0], df1]).reset_index(drop=True)
【讨论】: