问题描述
我有一个如下所示的数据集:
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字段中的所有uniques,如果这有意义的话。
结果看起来像这样:
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有更好的方法来做到这一点。
有什么建议?
1楼
这是一种方式。
由于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
2楼
使用与新列通过在specifyning列删除重复list
:
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