python - 如何对每一组pandas groupby应用不同的功能?

标签 python pandas

如果我有如下数据框,

import numpy as np
import pandas as pd
df2 = pd.DataFrame({'type':['A', 'A', 'B', 'B', 'C', 'C'], 'value':np.random.randn(6)})
>>> df2
  type     value
0    A -1.136014
1    A -0.715392
2    B -1.961665
3    B -0.525517
4    C  1.358249
5    C  0.652092

我想按“类型”列对数据框进行分组,并对每个组应用不同的函数,例如,对于类型为 A 的组,minmax 对于类型 B 的组,mean 对于类型 C 的组。

编辑2014-08-05 12:00 GMT+8:

用户提供了一些非常好的答案。但我使用 groupby 的原因是因为我希望结果在同一个数据框中,如下所示:

  type     value
0    A -1.136014
1    B -0.525517
2    C  1.005171

感谢任何帮助~

最佳答案

赞成 abarnert 的答案,因为这是一个很好的答案。

另一方面,为了根据OP的规范回答OP的问题:

for group in df2.groupby('type'):
    print group
    if group[0] == 'A':
        print group[1].min()
    if group[0] == 'B':
        print group[1].max()
    if group[0] == 'C':
        print group[1].mean()

另一方面,我建议简单地计算每个组的所有内容,因为无论如何它都很容易。这就是执行 groupby 操作背后的意图。

In [5]: summary = pd.DataFrame()

In [6]: summary['mean'] = df2.groupby('type').mean()['value']

In [7]: summary['min'] = df2.groupby('type').min()['value']

In [8]: summary['max'] = df2.groupby('type').max()['value']

摘要将如下所示:

In [9]: summary
Out[9]: 
          mean       min       max
type                              
A     0.440490  0.231633  0.649346
B     0.172303  0.023094  0.321513
C     0.669650 -0.373361  1.712662

关于python - 如何对每一组pandas groupby应用不同的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25130769/

相关文章:

python - 从 python 嵌套列表在 pandas 中创建新列

python - 解析来自 MapQuest 反向地理编码数据的信息

dictionary - 从 Pandas df 创建字典列表

python - 如何使用python删除语料库中的人名

python - 无法从 Tensorflow tfrecord 文件中读取

python - 这是在 Python/GAE 中返回 JSON 以在 JavaScript 中解析的正确方法吗?

python - from <module> import ... in __init__.py 使模块名称可见?

datetime.now() 和充满日期的 Series 之间的 Python 年差异?

Python 不释放内存

python - Pandas 系列改造