首页 > 解决方案 > Python数据框:尝试按多列分组时出现问题

问题描述

我正在尝试按多列分组并返回我的数据框中选择列的总和。我只能通过一列分组来做到这一点

df_sum = df.iloc[:, 27:].groupby(df['id']).sum().reset_index()

我成功地id对第 27 列到我的数据框末尾的值进行分组和求和。但是,当我尝试使用多列分组时

df_sum = df.iloc[:, 27:].groupby(df['id', 'year']).sum().reset_index()

我收到一个错误

KeyError: ('id', 'year')

我之前可以通过使用类似的东西来按多列分组

df.groupby(['id', 'year'])['some col name'].nunique().reset_index()

我尝试使用这种格式

df.groupby(['id', 'year'])[df.iloc[:,27:]].sum().reset_index()

但它也不起作用,因为我得到另一个错误

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

我目前对如何让它发挥作用有点困惑。我觉得我必须忽略一些相对简单的事情,因为我能够让它按一列分组。当按多列分组时,我只是在努力寻找一种让它工作的方法。

标签: pythonpandasdataframe

解决方案


检查id列是否在“从第 27 列到末尾”的子集中。

我想这个专栏在你的df中的某个较早的位置。

另一个尝试的解决方案

生成列的目标列表:

cols = df.columns[27:]

然后在您的说明中使用它:

df.groupby(['id', 'year'])[cols].sum().reset_index()

请注意,cols本身是一个list,但在上面的指令中,它必须用另一对方括号“包围”。


推荐阅读