2018.03.29 python-pandas transform/apply 的使用

#一般化的groupby方法:apply
 df = pd.DataFrame({'data1':np.random.rand(5),
                    'data2':np.random.rand(5),
                    'key1':list('aabba'),
                    'key2':['one','two','one','two','one']})
 print(df)
 #print(df.groupby('key1').apply(lambda x:x.describe()))
 #apply直接运算其中的函数
 #这里是匿名函数,直接描述分组后的统计量
 
 def f_df1(d,n):
     return(d.sort_index()[:n]) #返回排序后的前n行数据
 def f_df2(d,k1):
     return(d[k1])#返回分组后表的k1列,结果为series,层次化索引
 print(df.groupby('key1').apply(f_df1,2),'\n')#引入自己创建的函数,注意书写格式,f_df1的第一个参数默认df 第二个参数,2的形式
 print(df.groupby('key1').apply(f_df2,'data2'))
 #直接运行f_df函数
 #参数直接写在后面,也可以写为:.apply(f_df,n=2)
结果:<br />      data1     data2 key1 key2<br />0  0.253473  0.731034    a  one<br />1  0.531445  0.061414    a  two<br />2  0.733180  0.122293    b  one<br />3  0.550177  0.115940    b  two<br />4  0.101753  0.510581    a  one<br />           data1     data2 key1 key2<br />key1                                <br />a    0  0.253473  0.731034    a  one<br />     1  0.531445  0.061414    a  two<br />b    2  0.733180  0.122293    b  one<br />     3  0.550177  0.115940    b  two <br /><br />key1   <br />a     0    0.731034<br />      1    0.061414<br />      4    0.510581<br />b     2    0.122293<br />      3    0.115940<br />Name: data2, dtype: float64
# 数据分组转换 .transform
 import numpy as np
 import pandas as pd
 df = pd.DataFrame({'data1':np.random.rand(5),
                    'data2':np.random.rand(5),
                    'key1':list('aabba'),
                    'key2':['one','two','one','two','one']})
 print(df)
 k_mean = df.groupby('key1').mean()
 print(k_mean)
 print(pd.merge(df,k_mean,left_on = 'key1',right_index = True).add_prefix('mean_'))#.add_profix('mean_'):增添前缀
 print('------')
 #通过分组,合并,得到一个包含均值的Dataframe   以key1位分组的列均值
 
 print(df.groupby('key2').mean())#按照key2分组求均值
 print(df.groupby('key2').transform(np.mean))
 #data1,data2每个位置的元素取对应分组列的均值
 #字符串不能进行计算

结果:
data1 data2 key1 key2
0 0.845365 0.411704 a one
1 0.300226 0.411719 a two
2 0.476632 0.628493 b one
3 0.985675 0.304024 b two
4 0.418804 0.229940 a one
data1 data2
key1
a 0.521465 0.351121
b 0.731153 0.466258
mean_data1_x mean_data2_x mean_key1 mean_key2 mean_data1_y mean_data2_y
0 0.845365 0.411704 a one 0.521465 0.351121
1 0.300226 0.411719 a two 0.521465 0.351121
4 0.418804 0.229940 a one 0.521465 0.351121
2 0.476632 0.628493 b one 0.731153 0.466258
3 0.985675 0.304024 b two 0.731153 0.466258
------
data1 data2
key2
one 0.580267 0.423379
two 0.642951 0.357872
data1 data2
0 0.580267 0.423379
1 0.642951 0.357872
2 0.580267 0.423379
3 0.642951 0.357872
4 0.580267 0.423379

相关推荐