如果我只需要对一列应用不同的函数,是不是可以在不列出所有列的情况下应用 agg 函数

Posted

技术标签:

【中文标题】如果我只需要对一列应用不同的函数,是不是可以在不列出所有列的情况下应用 agg 函数【英文标题】:Is it possible to apply an agg function without listing out all the columns if I only need to apply a different function to one column如果我只需要对一列应用不同的函数,是否可以在不列出所有列的情况下应用 agg 函数 【发布时间】:2020-08-28 08:04:37 【问题描述】:

给定

df = pd.DataFrame(np.random.rand(4,4), columns=list('abcd'))
df
        a           b           c           d
    0   0.569586    0.730646    0.070111    0.226699
    1   0.092704    0.828220    0.190215    0.644188
    2   0.815397    0.281504    0.690391    0.115763
    3   0.614022    0.303781    0.738919    0.551983

我知道我们可以使用df.agg('a':'sum','b':'mean','c':'max','d':'min') 跨多个列应用多个函数。

如果我只需要应用一个不同的功能,是否可以在不列出所有列的情况下做到这一点。类似df.agg('a':'sum', //df.columns[1:]// : 'mean')

【问题讨论】:

【参考方案1】:

pandas agg 函数也获取列表作为参数。 所以你可以使用类似的东西

params = ['sum'] + len(df.columns[1:]) * ['mean']
df.agg([params])

【讨论】:

【参考方案2】:

AFAIK,不,您需要明确的列名作为键。但是,您可以像这样构建字典:

agg_dict = 'a':'sum'
for c in df.columns[1:]: agg_dict[c] = 'mean'

df.groupby('some_columns').agg(agg_dict)

【讨论】:

感谢您提供干净的解决方案!

以上是关于如果我只需要对一列应用不同的函数,是不是可以在不列出所有列的情况下应用 agg 函数的主要内容,如果未能解决你的问题,请参考以下文章

检索一列而不是另一列的不同 SQL 查询结果

如果索引列不同,则从一列中求和值?

如何定义自定义聚合函数来对一列向量求和?

如何定义自定义聚合函数来对一列向量求和?

以不同的语言运行 Qt 应用程序?

在反应应用程序的不同列中选择单元格