python - Pandas groupby 总和保持第三列

标签 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

我想要的是用总和对 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/

相关文章:

python - WebDriver异常: Message: The command 'GET/session/7.../displayed' was not found while Explicit Wait with safaridriver and Selenium 3. 13.0

Python - 在保持顺序的同时附加到字典列表

python - 将带有时区的日期格式更改为 yyyy-mm-dd hh :mm:ss

python - 如果在 Pandas 中的字符串末尾,则删除某些字符

python - 将 on_press 重构为类规则

python - 使用 `with Pool() as p`进行错误处理

python - 如何在没有命令行参数的情况下为 python argparse.parser 提供代码内部的参数?

python - Pandas :每次满足条件时都会增加

python - 如何删除 pandas 中匹配一列并在另一列上满足方程式的行?

python - 以日期为条件的每行的 Pandas 数据帧平均值