pandas groupby函数不会求和> 8列

时间:2017-06-08 16:48:35

标签: python pandas group-by

我有一个包含13个文本列和16个数字列的pandas数据框(总共29列,大约13k行)。我想通过前13列聚合数据,并返回16个数字列的结果总和。我尝试过以下方法:

df.groupby(1,2,3,4,5,6,7,8,9,10,11,12,13)[14,15,26,17,18,19,20,21,22,23,24,25,26,27,28,29].sum()

但是这会返回一个错误“groupby()需要1到8个位置参数,但是14个被赋予”

我本质上是尝试执行以下SQL语法:

select 1,2,3,4,5,6,7,8,9,10,11,12,13,sum(14),sum(15),sum(16),sum(17),sum(18),sum(19),sum(20),sum(21),sum(22),sum(23),sum(24),sum(25),sum(26),sum(27),sum(28),sum(29)
from df group by 1,2,3,4,5,6,7,8,9,10,11,12,13

我也喜欢这个过程已经完成,所以我最终得到的形状与旧的相同(显然行数较少!)

任何帮助表示感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

使用.select_dtypesdocs)隔离数字列的更通用的方法:

import pandas as pd
import numpy as np

numerical_columns = df.select_dtypes(include=[np.number]).columns.tolist()
other_columns = df.select_dtypes(exclude=[np.number]).columns.tolist()

df.groupby(other_columns)[numerical_columns].sum()

至于为什么你的代码无效,这是因为你需要将列表列名称传递给groupby。