在這種情況下,我有數據幀像如何根據特定的列組向數據框添加額外的總和列?
col1 col2
a 1
a 2
a 3
b 1
b 2
我要的是第一GROUPBY col1
再總結組的col2
列,最後加入sum
到數據幀,並得到
col1 col2 sum
a 1 6
a 2 6
a 3 6
b 1 3
b 2 3
在這種情況下,我有數據幀像如何根據特定的列組向數據框添加額外的總和列?
col1 col2
a 1
a 2
a 3
b 1
b 2
我要的是第一GROUPBY col1
再總結組的col2
列,最後加入sum
到數據幀,並得到
col1 col2 sum
a 1 6
a 2 6
a 3 6
b 1 3
b 2 3
選項1
transform
返回與原始對象的相同的索引的結果。
我使用assign
以新列返回數據幀的副本。
有關更多信息,請參閱split-apply-combine文檔。
df.assign(Sum=df.groupby('col1').col2.transform('sum'))
col1 col2 Sum
0 a 1 6
1 a 2 6
2 a 3 6
3 b 1 3
4 b 2 3
選項2
正常groupby
和sum
的效果,請使用join
。
df.join(df.groupby('col1').col2.sum().rename('Sum'), on='col1')
col1 col2 Sum
0 a 1 6
1 a 2 6
2 a 3 6
3 b 1 3
4 b 2 3
選項3
創意與pd.factorize
和np.bincount
f, u = df.col1.factorize()
df.assign(Sum=np.bincount(f, df.col2).astype(df.col2.dtype)[f])
col1 col2 Sum
0 a 1 6
1 a 2 6
2 a 3 6
3 b 1 3
4 b 2 3
方法