通过多列对分组并求和 - 创建新列并添加if条件

3

我需要按多列进行分组,然后在新列中添加If条件并得到总和。我尝试了下面的代码,并且在单列分组上运行良好:

df['new column'] = (
    df['value'].where(df['value'] > 0).groupby(df['column1']).transform('sum')
)

但是,当我尝试按多列分组时,会出现错误。

df['new_column'] = (
        df['value'].where(df['value'] > 0).groupby(df['column1', 'column2']).transform('sum')
    )

错误:
->return self._engine.get_loc(casted_key) 
The above exception was the direct cause of the following exception: 
->indexer = self.columns.get_loc(key) 
->raise KeyError(key) from err 
->if is_scalar(key) and isna(key) and not self.hasnans: ('column1', 'column2')

请问如何更改代码以获得相同结果但按多列分组?

谢谢


1
提供一个数据框示例作为代码。 - aestet
1个回答

1

错误原因

  • 选择多列的语法 df['column1', 'column2'] 是错误的。应该使用 df[['column1', 'column2']]
  • 即使你使用 df[['column1', 'column2']] 进行 groupby,pandas 仍会引发另一个错误,指出分组器应该是 一维的。这是因为 df[['column1', 'column2']] 返回的是一个二维对象。

如何修复错误?

困难的方法:

将每个分组列作为一维系列传递给 groupby

df['new_column'] = (
        df['value']
          .where(df['value'] > 0)
          .groupby([df['column1'], df['column2']]) # Notice the change
          .transform('sum')
)
简单方法:

首先将掩码列的值分配给目标列,然后像往常一样进行 groupby + transform 操作。

df['new_column'] = df['value'].where(df['value'] > 0)
df['new_column'] = df.groupby(['column1', 'column2'])['new_column'].transform('sum')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接