首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >:尝试按多列分组时的问题

:尝试按多列分组时的问题
EN

Stack Overflow用户
提问于 2019-12-14 12:47:39
回答 1查看 968关注 0票数 1

我试图按多个列进行分组,并返回数据帧中选择列的总和。我只按一列分组就能做到这一点。

代码语言:javascript
运行
复制
df_sum = df.iloc[:, 27:].groupby(df['id']).sum().reset_index()

我成功地按id分组,并将从第27列到数据帧末尾的值相加。但是,当我尝试使用以下方法按多列分组时

代码语言:javascript
运行
复制
df_sum = df.iloc[:, 27:].groupby(df['id', 'year']).sum().reset_index()

我犯了个错误

代码语言:javascript
运行
复制
KeyError: ('id', 'year')

在此之前,我已经能够按多个列进行分组,方法如下

代码语言:javascript
运行
复制
df.groupby(['id', 'year'])['some col name'].nunique().reset_index()

我试过使用这种格式

代码语言:javascript
运行
复制
df.groupby(['id', 'year'])[df.iloc[:,27:]].sum().reset_index()

但是它也不能工作,因为我得到了另一个错误。

代码语言:javascript
运行
复制
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

我现在有点搞不懂我怎么才能让这件事起作用。我觉得我一定忽略了一些相对简单的东西,因为我能够让它按一列进行分组。当按多列分组时,我只是很难找到一种让它工作的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-14 19:52:17

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

我认为本专栏在df中位于早期的位置。

另一种尝试方法

生成列的目标列表:

代码语言:javascript
运行
复制
cols = df.columns[27:]

然后在你的指令中使用它:

代码语言:javascript
运行
复制
df.groupby(['id', 'year'])[cols].sum().reset_index()

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59335233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档