【问题标题】:Pandas - create new columns with groupby sum and where clausePandas - 使用 groupby sum 和 where 子句创建新列
【发布时间】: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”)

标签: python pandas dataframe


【解决方案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)

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 2019-09-29
    • 2020-02-05
    • 2016-12-23
    • 2021-12-26
    • 2021-07-16
    相关资源
    最近更新 更多