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

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

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

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

【问题讨论】:

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

标签: python-3.x pandas pandas-groupby


【解决方案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'])
猜你喜欢
  • 2017-07-08
  • 2022-01-12
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多