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