pandas-5.groupby

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

推荐阅读更多精彩内容