我想基于'id'对下面的数据帧进行分组,然后为'id'的所有值设置'flow'的总和,除了0;那些应该保持独立。什么是最好的解决方案?
原件:
id flow
0 1
0 1
1 1
1 1
2 1
2 1
汇总:
id flow
0 1
0 1
1 2
2 2
答案 0 :(得分:2)
一种方法是使用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
答案 1 :(得分:0)
你可以将这个问题分解为你在除了0之外的所有id中进行分组然后只是附加0的值.I.e。
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)