python库学习笔记——分组计算利器:pandas中的groupby技术

        最近处理数据需要分组计算,又用到了groupby函数,温故而知新。

  分组运算的第一阶段,pandas 对象(无论是 Series、DataFrame 还是其他的)中的数据会根据你所提供的一个或多个键被拆分(split)为多组。拆分操作是在对象的特定轴上执行的。例如,DataFrame 可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用到各个分组并产生一个新值。最后,所有这些函数的执行结果会被合并到最终的结果对象中。结果对象的形式一般取决于数据上所执行的操作。


举例说明,生成随机DataFrame数据

输入

df = DataFrame({'key1':['a','a','b','b','a'],
                'key2':['one','two','one','two','one'],
                'data1':np.random.randn(5),
                'data2':np.random.randn(5)})
输出df


假设我们想要按 key1 进行分组,并计算 data1 列的平均值。

输入

df['data1'].groupby(df['key1']).mean() or df.groupby('key1')['data1'].mean()
输出

key1
a    0.310092
b   -0.785952
Name: data1, dtype: float64


假设我们想要按 key1 ,key2进行分组,并计算 data1 列的平均值。

输入

df['data1'].groupby([df['key1'],df['key2']]).mean() or df.groupby(['key1','key2'])[['data1']].mean()
输出

key1  key2
a     one    -0.078753
      two     1.087782
b     one    -1.346429
      two    -0.225475
Name: data1, dtype: float64

另外,我们可以对分组进行迭代,以多重键为例:

输入

for name,group in df.groupby('key1'):
    print (name)
    print (group)
输出

a
      data1     data2 key1 key2
0  0.033971  0.066088    a  one
1  1.087782 -0.095748    a  two
4 -0.191477 -0.057805    a  one
b
      data1     data2 key1 key2
2 -1.346429  0.648059    b  one
3 -0.225475  1.440988    b  two



参考资料:《利用python进行数据分析》







原文地址:https://www.cnblogs.com/mtcnn/p/9411633.html