我有一个看起来像这样的数据集:
Master Sec Amount
1234 98765 191
1234 98765 926
1234 98764 236
2345 76543 233
2345 76543 963
3456 54321 221
3456 54321 820
3456 43210 281
3456 32101 786
我想要的是用总和对 Master 进行分组,然后将该数字应用于 sec 字段中的所有唯一值(如果有意义的话)。
结果看起来像这样:
Sec Amount
98765 1353
98764 1353
76543 1196
54321 2108
43210 2108
32101 2108
我有代码已经这样做了:
newdf= df[['Sec', 'Master']]
df = df[['Master', 'Amount']]
df = df.groupby(['Master'], as_index=False)['Amount'].sum()
newdf = pd.merge(newdf, df, on='Master')
newdf = newdf[['Sec', 'Amount']]
newdf = newdf.drop_duplicates()
但是创建一个新的数据框似乎并不是特别 pythonic,我猜 Pandas 有更好的方法来做到这一点。
有什么建议吗?
最佳答案
这是一种方法。由于 groupby
返回一个系列,您可以使用它来映射 Master
,最后删除重复的行。
import pandas as pd
df = pd.DataFrame([[1234, 98765, 191],
[1234, 98765, 926],
[1234, 98764, 236],
[2345, 76543, 233],
[2345, 76543, 963],
[3456, 54321, 221],
[3456, 54321, 820],
[3456, 43210, 281],
[3456, 32101, 786]],
columns=['Master', 'Sec', 'Amount'])
df['Amount'] = df['Master'].map(df.groupby('Master')['Amount'].sum())
df = df[['Sec', 'Amount']].drop_duplicates()
# Sec Amount
# 0 98765 1353
# 2 98764 1353
# 3 76543 1196
# 5 54321 2108
# 7 43210 2108
# 8 32101 2108
关于python - Pandas groupby 总和保持第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48748172/