python - 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
我目前对如何让它发挥作用有点困惑。我觉得我必须忽略一些相对简单的事情,因为我能够让它按一列分组。当按多列分组时,我只是在努力寻找一种让它工作的方法。
解决方案
检查id列是否在“从第 27 列到末尾”的子集中。
我想这个专栏在你的df中的某个较早的位置。
另一个尝试的解决方案
生成列的目标列表:
cols = df.columns[27:]
然后在您的说明中使用它:
df.groupby(['id', 'year'])[cols].sum().reset_index()
请注意,cols本身是一个list,但在上面的指令中,它必须用另一对方括号“包围”。
推荐阅读
- html - 如何用 CSS 弯曲三角形的斜边
- sql-server - T-SQL - 根据来自多个表的值扩展本地参数中的文本,而不使用 if 语句
- java - Eclipse (Java) 中未加载 HttpClient 类
- spring - 无法创建弹簧豆
- excel-formula - 在每一行中从多个不同的列中查找唯一值
- solr - 如何使 Solr 搜索不区分大小写?
- mysql - 如何使用带有 WITH 子句的 INSERT 语句?
- google-cloud-platform - GCP 负载平衡器是否支持带有 SSL 终止的 HTTPS 和 AMQP 端口?
- c - 如何监控多个位置并为每个路径分别显示一条消息?
- android - 未找到处理 Intent 的 Activity:intent.action.PICK