【问题标题】:How to apply different aggregation functions to same column by using pandas Groupby如何使用 pandas Groupby 将不同的聚合函数应用于同一列
【发布时间】:2015-08-20 21:16:59
【问题描述】:

做的时候就清楚了

 data.groupby(['A','B']).mean()

我们通过级别 'A' 和 'B' 得到多索引的东西,以及每个组的平均值的一列

我怎么能同时拥有 count()、std() ?

所以结果看起来像在数据框中

A   B    mean   count   std

【问题讨论】:

  • 请通过 - stackoverflow.com/questions/15322632/… 。你的问题似乎和这个差不多。
  • @PralhadNarsinhSonar 我想说这个问题是不同的,这里的 OP 询问如何一次应用多个不同的函数,而不是从单个函数生成多个列

标签: python pandas


【解决方案1】:

以下应该有效:

data.groupby(['A','B']).agg([pd.Series.mean, pd.Series.std, pd.Series.count])

基本上调用agg 并传递函数列表将生成应用这些函数的多个列。

例子:

In [12]:

df = pd.DataFrame({'a':np.random.randn(5), 'b':[0,0,1,1,2]})
df.groupby(['b']).agg([pd.Series.mean, pd.Series.std, pd.Series.count])
Out[12]:
          a                
       mean       std count
b                          
0 -0.769198  0.158049     2
1  0.247708  0.743606     2
2 -0.312705       NaN     1

您还可以传递方法名称的字符串,常见的可以使用,一些比较晦涩的方法我不记得了,但在这种情况下它们可以正常工作,感谢@ajcr 的建议:

In [16]:
df = pd.DataFrame({'a':np.random.randn(5), 'b':[0,0,1,1,2]})
df.groupby(['b']).agg(['mean', 'std', 'count'])

Out[16]:
          a                
       mean       std count
b                          
0 -1.037301  0.790498     2
1 -0.495549  0.748858     2
2 -0.644818       NaN     1

【讨论】:

  • 为了节省一点输入,可以只将函数名称的字符串传递给agg,例如agg(['mean', 'std', 'count'])(至少在较新版本的Pandas中)。
  • 是的,我知道,但有时有效,有时无效,我不记得哪些有效,所以为了清楚起见,我想明确说明,不过会更新,感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2018-12-16
  • 1970-01-01
相关资源
最近更新 更多