pandas函数应用篇之GroupBy.apply

        讲解pandas.core.groupby.GroupBy.apply的一个运用实例,经常结合numpy库和隐函数lamda来使用,官网API看得云里雾里的。如果对博客的数据感兴趣可以在第一届.腾讯社交广告高校算法大赛处下载。

#将DataFrame类型的dfTrain按照key='appID'进行分组,生成GroupBy对象(由每个appID对应的rows组成的对象),然后由apply函数对每个对象进行lambda隐函数对应的函数操作:计算每个appID对应的lable列的平均值。
#dfTrain数据量太多,在后面有少部分数据展示,用于帮助理解。
key = "appID"
dfCvr = dfTrain.groupby(key).apply(lambda df: np.mean(df["label"])).reset_index()
#给DataFrame的columns重新赋值
dfCvr.columns = [key, "avg_cvr"]
print('dfCvr test dfTrain.groupby.apply function.')
print(dfCvr)
#数据太多展示部分输出结果
test dfTrain.groupby.apply function.
    appID   avg_cvr
0      14  0.002515
1      25  0.006042
2      68  0.000431
3      75  0.000000
4      83  0.106286
5      84  0.018963
6      88  0.081780
7     100  0.030855


#dfTrain数据太多展示小部分
         label  clickTime  conversionTime  creativeID   userID  positionID  \
0            0     170000             NaN        3089  2798058         293   
1            0     170001             NaN        3089   195578        3659   
2            0     170014             NaN        3089  1462213        3659   
3            0     170030             NaN        3089  1985880        5581   
4            0     170047             NaN        3089  2152167        5581   
5            0     170053             NaN        3089  2152167        5581  
         connectionType  telecomsOperator  adID  camgaignID  advertiserID  \
0                     1                 1  1321          83            10   
1                     0                 2  1321          83            10   
2                     0                 3  1321          83            10   
3                     1                 1  1321          83            10   
4                     1                 1  1321          83            10   
5                     1                 1  1321          83            10   
         appID  appPlatform  
0          434            1  
1          434            1  
2          434            1  
3          434            1  
4          434            1  
5          434            1  

1、pandas的groupby函数:
        pandas提供了一个灵活高效的groupby函数,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等。计算透视表或交叉表。执行分位数分析以及其他分组分析(目前没这么多深刻的体会,先记下来日慢慢领悟~)。

首先来看看下面这个非常简单的表格型数据集(以DataFrame的形式):

df6 = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],
    'key2':['one', 'two', 'one', 'two', 'one'],
    'data1':np.random.randn(5),
    'data2':np.random.randn(5)})
#输出结果
df6                              
0    1.006038  2.610016    a  one
1    0.499684  1.004764    a  two
2    1.056336  0.303721    b  one
3    0.088034  0.723217    b  two
4   -0.927159 -0.216762    a  one


#假设你想要按key1进行分组,并计算data1列的平均值,我们可以访#data1,并根据key1调用groupby:
grouped = df6['data1'].groupby(df6['key1'])
print(grouped)
#输出结果,变量grouped是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df['key1']的中间数据而已,然后我们可以调用GroupBy的mean方法来计算分组平均值:
<pandas.core.groupby.SeriesGroupBy object at 0x1126b4c18>

grouped.mean()
#输出结果
Out[46]:
key1
a    0.192854
b    0.572185
Name: data1, dtype: float64

df.groupby('key1').mean()
#输出结果

data1   data2
key1        
a   0.092027    0.555432
b   0.332136    -0.715771

2、pandas的apply函数
        apply是pandas库的一个很重要的函数,多和 groupby 函数一起用,也可以直接用于 DataFrame 和 Series 对象。主要用于数据聚合运算,可以很方便的对分组进行现有的运算和自定义的运算。

groupby与apply函数的使用原理图(拆分-应用-合并三部曲):
这里写图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值