熊猫数据框按列位置分组

Posted

技术标签:

【中文标题】熊猫数据框按列位置分组【英文标题】:pandas dataframe groupby by column position 【发布时间】:2018-07-19 12:14:11 【问题描述】:

我有一个函数可以在 pandas 数据帧上进行分组。问题是我的数据框可以有可变数量的列。我想汇总:将最后一列与第一列相加。最后一列的名称不同,但第一列的名称是固定的。

我怎样才能实现分组?我尝试使用 iloc 并使用 df.columns[-1] 获取最后一列的列名,但是,这些技巧似乎都不起作用。

有没有比将最后一列名称更改为某个通用值更好的方法来实现这一点?

【问题讨论】:

如果我或其他答案有帮助,请不要忘记accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。 【参考方案1】:

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

【讨论】:

如果我有多个列分组,该怎么做?上面的方法不支持多列。【参考方案2】:

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

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

【讨论】:

Sorry.. 我忘了说我需要汇总多个列。所以,我想使用agg 和 groupby。当我在 agg 函数中使用 iloc 时,出现错误 IndexError: too many indices for array 嗯,所以你需要s = df.iloc[:, [-1, -2]].groupby(df.iloc[:, 0]).sum() ? 我需要s = df.groupby(df.iloc[:, 0]).agg(df.iloc[:,-1]:['sum'],'df.iloc[:,1]:['sum'],df.iloc[:,-1]:['count'],'df.iloc[:,1]:['count'])

以上是关于熊猫数据框按列位置分组的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框分组和求和,组内,跨行值而不是按列

熊猫 groupby 没有将按列分组转换为索引

数据框按列值过滤行

如何在 Pandas 数据框中按列值分组

如何按列值的计数进行分组并对其进行排序?

Pandas数据框按顺序分组[重复]