按列位置对pandas数据框进行分组

7
我有一个函数,在pandas数据框上进行分组操作。 问题是我的数据框可能具有可变数量的列。 我想通过第一列对最后一列进行汇总计算:求和。 最后一列的名称不同,但是第一列的名称是固定的。
如何进行分组操作? 我尝试使用iloc并通过使用df.columns [-1]获取最后一列的列名,但是这些技巧似乎都无法实现。
是否有比将最后一列名称更改为某个常见值更好的方法来实现此目的?
2个回答

6

df.groupby(df.columns[0])[df.columns[-1]].sum()应该可以工作。

示例

df = pd.DataFrame({
    'a': [1,1,2,2],
    'b': [1,2,3,4]
})

df.groupby(df.columns[0])[df.columns[-1]].sum()
#a
#1    3
#2    7
#Name: b, dtype: int64

1
如果我有多个列进行分组,该怎么做?上面的方法不支持多个列。 - Michael Li

2

只需使用由iloc选择的Series,数据由@Psidom借用:

s = df.iloc[:, -1].groupby(df.iloc[:, 0]).sum()
print (s)
a
1    3
2    7
Name: b, dtype: int64

抱歉..我忘了提到我需要对多列进行汇总。因此,我想要在groupby后使用agg。但是,在agg函数内部使用iloc时出现了错误IndexError:too many indices for array - add787
你需要s = df.iloc[:, [-1, -2]].groupby(df.iloc[:, 0]).sum()吗? - jezrael
我需要 s = df.groupby(df.iloc[:, 0]).agg(df.iloc[:,-1]:['sum'],'df.iloc[:,1]:['sum'],df.iloc[:,-1]:['count'],'df.iloc[:,1]:['count']) - add787

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接