Python数据帧:尝试按多列分组时出现问题

Python数据帧:尝试按多列分组时出现问题,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试按多个列分组,并返回数据框中选定列的总和。我只需要按一列进行分组就可以做到这一点 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', 'yea

我正在尝试按多个列分组,并返回数据框中选定列的总和。我只需要按一列进行分组就可以做到这一点

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
我现在有点困惑如何才能让它工作。我觉得我一定忽略了一些相对简单的东西,因为我能够让它按一列进行分组。我正在努力找到一种方法,在按多个列进行分组时使其工作。

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

我假设此列位于df中较早的某个位置

另一个尝试的解决方案 生成列的目标列表:

cols = df.columns[27:]
然后在你的指导中使用它:

df.groupby(['id', 'year'])[cols].sum().reset_index()
请注意,cols本身是一个列表,但在上面的说明中
它必须用另一对方括号“封装”起来。

您能发布您的数据框吗?删除groupby中的字母
df
。你的代码应该是
df_sum=df.iloc[:,27:].groupby(['id','year']).sum().reset_index()
@moys现在我刚刚得到一个错误
keyrerror:'id'
year
列都在我的数据框的第27列之前。所以我明白你的意思,但是为什么
df_sum=df.iloc[:,27:].groupby(df['id']).sum().reset_index()
会起作用呢?只有当我尝试按第二列分组时,我才遇到关键错误。很抱歉,我最初误读了您的回答。您的解决方案非常有效,谢谢!