pandas-5.groupby
2018-06-18 本文已影响0人
ddm2014
pandas的groupby有点像excel的透视表,思路是分类,运算,聚合。
一般的表达为
dataframe.groupby(['列1',‘列2]).mean()
dataframe.groupby(['列1',‘列2]).agg(['函数1',’函数2])
多是分组统计一个/多个自有函数,比如mean,max,也可以传入自定义函数。
或者
dataframe.groupby(['列1',‘列2])['列名'].apply(function)
多是分组用自定义函数统计,列名省略则是对全部dataframe,有则是只对这一列
或者
dataframe.groupby(['列1',‘列2]).agg({'列1':'函数1','列2':'函数2'})
对多列用不同函数groupby
其中['列1',‘列2]是分类依据,如果只按一列则直接dataframe.groupby('列1')
groupby是根据dataframe的行计算,agg,apply是根据列计算。默认只对数字列进行groupby。
import tushare as ts
import pandas as pd
code = '000001'
start = '2018-01-15'
end = '2018-01-30'
gf = ts.get_k_data(code, start=start, end=end)
gf = gf.reset_index(drop=True)
gf['label'] = gf['close'].map(lambda x:1 if x > gf['close'].mean() else 2)
code = '000001'
start = '2018-01-15'
end = '2018-01-30'
gf = ts.get_k_data(code, start=start, end=end)
gf = gf.reset_index(drop=True)
gf['label_close'] = gf['close'].map(lambda x:1 if x > gf['close'].mean() else 2)
gf['label_high'] = gf['high'].map(lambda x:1 if x > gf['close'].mean() else 2)
gf1 = gf.groupby('label_close').mean()
gf2 = gf.groupby('label_close').agg(['mean','max'])
gf3 = gf.groupby(['label_close','label_high']).agg(['mean','max'])
gf4 = gf.groupby('label_close')['open'].agg(['mean','max'])
gf5 = gf.groupby('label_close').agg({'open':'mean','high':'max'})
先print(gf)
gf
print(gf1)
gf1
print(gf2)
gf2
print(gf3)
gf3
print(gf4)
gf4
print(gf5)
image.png