pandas 分组聚合

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],
                'key2': ['one', 'two', 'one', 'two', 'one'],
                'data1': np.random.randn(5),
                'data2': np.random.randn(5)})
df
data1data2key1key2
01.2445971.243988aone
1-1.253387-0.544606atwo
2-1.2735051.017159bone
3-0.681958-0.187279btwo
4-0.6832251.054060aone

按‘key1’分组

grouped = df.groupby('key1')
grouped
#<pandas.core.groupby.DataFrameGroupBy object at 0x0000000009102908>

对于分组的某一列或者多个列,应用agg(func)可以对分组后的数据应用func函数。例如:用group1[‘data1’].agg(‘mean’)对分组后的’data1’列求均值。当然也可以推广到同时作用于多个列和使用多个函数上。

grouped.agg('mean')
data1data2
key1
a-0.2306720.584481
b-0.9777310.414940
grouped.agg(['sum','mean'])
data1data2
summeansummean
key1
a-0.692015-0.2306721.7534420.584481
b-1.955463-0.9777310.8298810.414940
grouped['data1'].agg(['sum','mean'])
summean
key1
a-0.692015-0.230672
b-1.955463-0.977731
grouped[['data1']].agg(['sum','mean'])
data1
summean
key1
a-0.692015-0.230672
b-1.955463-0.977731
pd.pivot_table(df, index='key1')
data1data2
key1
a-0.2306720.584481
b-0.9777310.414940
pd.pivot_table(df, index='key1', columns='key2') 
data1data2
key2onetwoonetwo
key1
a0.280686-1.2533871.149024-0.544606
b-1.273505-0.6819581.017159-0.187279

透视表pivot_table,单元格中的数值为同组数值的平均值

df.pivot_table(['data1'], index='key1',columns='key2')  
data1
key2onetwo
key1
a0.280686-1.253387
b-1.273505-0.681958
df
data1data2key1key2
01.2445971.243988aone
1-1.253387-0.544606atwo
2-1.2735051.017159bone
3-0.681958-0.187279btwo
4-0.6832251.054060aone

如果将参数margins设置为True,则可以得到分项总计数据。

df.pivot_table(index='key1',columns='key2', margins=True)
data1data2
key2onetwoAllonetwoAll
key1
a0.280686-1.253387-0.2306721.149024-0.5446060.584481
b-1.273505-0.681958-0.9777311.017159-0.1872790.414940
All-0.237378-0.967672-0.5294961.105069-0.3659420.516665

按’key1’,’key2’进行分组,使用describe()列出详细信息

grouped2=df.groupby(['key1','key2'])
grouped2.describe()
data1data2
countmeanstdmin25%50%75%maxcountmeanstdmin25%50%75%max
key1key2
aone2.00.2806861.363176-0.683225-0.2012700.2806860.7626411.2445972.01.1490240.1342991.0540601.1015421.1490241.1965061.243988
two1.0-1.253387NaN-1.253387-1.253387-1.253387-1.253387-1.2533871.0-0.544606NaN-0.544606-0.544606-0.544606-0.544606-0.544606
bone1.0-1.273505NaN-1.273505-1.273505-1.273505-1.273505-1.2735051.01.017159NaN1.0171591.0171591.0171591.0171591.017159
two1.0-0.681958NaN-0.681958-0.681958-0.681958-0.681958-0.6819581.0-0.187279NaN-0.187279-0.187279-0.187279-0.187279-0.187279
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值