【发布时间】:2019-01-12 20:41:32
【问题描述】:
我正在使用以下代码行将 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: cannot reindex from a duplicate axis”
我不能在第一个示例之前使用布尔索引,因为我需要创建几个新列,每个列都以 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.head().to_dict()帮助 -
数据是私有的,所以不能
-
我认为它没有帮助,但我添加了它
-
刚刚用提供的数据运行
df[df.map == "X"].groupby(['date', 'name', 'extra'])['amount'].transform(sum),它就可以工作了。我无法重现您的问题 -
对于我来说,完整的数据也不会引发错误。它将其设置为引发错误的新列(如“X_Sum”)