我使用下面的代码行将groupby sum设置为新列
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:无法从重复的轴重新索引”
我不能在第一个示例之前使用布尔索引,因为我需要创建几个新列,每个列都将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值不同的值进行求和。
答案 0 :(得分:1)
[实际上并没有解决,小警告]
确定了
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)