gpt4 book ai didi

python - Pandas - 使用 groupby sum 和 where 子句创建新列

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:04 26 4
gpt4 key购买 nike

我使用以下代码行将 groupby 总和设置为新列

df['new_col'] = df.groupby(['col1', 'col2'])['amount'].transform(sum)

这工作得很好,但我还需要只对另一个 col(map) 为特定值的金额求和

我试过用这个:

df['new_col'] = df[df['map'] == 'newCol'].groupby(['col1', 'col2'])['amount'].transform(sum)

但出现错误:“ValueError:无法从重复轴重新索引”

我不能在第一个示例之前使用 bool 索引,因为我需要创建几个新列,每个列都将 map 作为新值。因此,我不能一直就地修改 df。

编辑:

数据样本:

d={'source': {'0': 'r', '1': 'r', '2': 'r', '3': 'r', '4': 'r'}, 'date': {'0': Timestamp, '1': Timestamp, '2': Timestamp, '3': Timestamp, '4': Timestamp}, 'name': {'0': 'A', '1': 'A', '2': 'A', '3': 'A', '4': 'A'}, 'codename': {'0': 'D', '1': 'D', '2': 'D', '3': 'E', '4': 'F'}, 'map': {'0': 'X', '1': 'X', '2': 'X', '3': 'X', '4': 'Y'}, 'amount': {'0': 250.0, '1': 450.0, '2': 360.0, '3': 10.0, '4': -436.0}, 'extra': {'0': 'P', '1': 'P', '2': 'P', '3': 'P', '4': 'P'}}

df = pd.DataFrame(d)

按日期、姓名等分组。所有新列都将按金额求和,其中 map 等于不同的值。

最佳答案

[实际上并没有解决,小警告]

好的,明白了

df['new_col'] = df['amount']
df = df[df['map'] == 'X'].groupby(['col1', 'col2'])['new_col'].sum().reset_index()

编辑:这个答案实际上有一个小问题。尝试创建多个新列时出现此问题

df['new_col'] = df['amount']
df['new_col2'] = df['amount']
df = df[df['map'] == 'X'].groupby(['col1', 'col2'])['new_col'].sum().reset_index()
df = df[df['map'] == 'Y'].groupby(['col1', 'col2'])['new_col2'].sum().reset_index()

由于第一个 groupby 排除了 map 和 new_col2 列,第二个显然不起作用(KeyError)

关于python - Pandas - 使用 groupby sum 和 where 子句创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698291/

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