Python Pandas groupby,总和保持第三列
我有一个如下所示的数据集:Python Pandas groupby,总和保持第三列,python,pandas,Python,Pandas,我有一个如下所示的数据集: 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 Sec Amount 98765 1353 9876
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
Sec Amount
98765 1353
98764 1353
76543 1196
54321 2108
43210 2108
32101 2108
我想要的是,将主数据分组,得到总金额,然后将该数字应用于sec字段中的所有Unique,如果这有意义的话
结果如下所示:
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
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()
但是创建一个新的数据框架似乎并不是特别适合Python,我猜熊猫有更好的方法来做到这一点
有什么建议吗?这里有一种方法。由于
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
用于具有的新列,用于通过在列表中指定的列删除重复项:
df['Amount'] = df.groupby('Master')['Amount'].transform('sum')
df = df.drop_duplicates(['Sec', 'Amount'])
print (df)
Master Sec Amount
0 1234 98765 1353
2 1234 98764 1353
3 2345 76543 1196
5 3456 54321 2108
7 3456 43210 2108
8 3456 32101 2108