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
相关推荐
/*垂直居中,div上边界距离窗口上边的距离为窗口高度的50%,并针对不同浏览器进行兼容。-- 在外层添加一个div,把行内容居中,添加.row .justify-content-center -->