我有一个包含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
我也喜欢这个过程已经完成,所以我最终得到的形状与旧的相同(显然行数较少!)
任何帮助表示感谢,谢谢!
答案 0 :(得分:1)
使用.select_dtypes
(docs)隔离数字列的更通用的方法:
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。