gpt4 book ai didi

python - Pandas groupby 总和保持第三列

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:35 25 4
gpt4 key购买 nike

我有一个看起来像这样的数据集:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com