您的位置:首页 > 移动开发

pandas函数应用篇之GroupBy.apply

2017-07-04 22:51 387 查看
讲解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函数的使用原理图(拆分-应用-合并三部曲):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python