1. 聚合
grouped=df.groupby(by='column name'), 是一个DataFrameGroupBy对象,可以迭代grouped中的每个元素是一个元组,元组里面的值是(索引(分组的值),分组之后的DataFrame对象)
1 dfs_002=dfs_001.groupby(by='Cabinet / ATO')
常见的DataFrameGroupBy对象经过优化的方法:
(1) count 分组中非Na值的数量
(2) sum 非NA值的和
(3) mean 非NA值的平均值
(4) median 非NA值的算数中位数
(5) std, var 无偏(分母为n-1)标准差和方差
(6) min, max 非NA值的最大和最小值
2. 分组
如果对df对象的所有列按照某个字段分组,分组的结果是DataFrameGroupBy,行索引是macd_flag。而且,当对df对象的所有列按照某个字段应用分组统计函数时,结果是一个dataframe对象。
dfs_macd_a.groupby(by='macd_flag') dfs_macd_a.groupby(by='macd_flag').count()
考虑另外一个场景,假如要想统计在df数据集中两列元素出现次数也就是统计A、B两列的元素的出现情况,只要在groupby()中的by参数添加就可以。
dfs_macd_b.groupby(by=['A','B'])
使用.size()可得到<class 'pandas.core.series.Series'>结构的数据
dfs_macd_a.groupby(by='macd_flag').size()
对StarBucks国家和省份分布进行分组统计:可以在by=后面写列表。结果是个Series类型的数据,包含country和state/province两个索引列。因为需要对brand列进行统计,所以后面的统计条件需要使用df['country]和df['state/province]。
grouped=df["brand"].groupby(by=[df['country'],df['state/Province']]).count()
如果是对整个dataframe进行分组,统计条件直接使用country和state/province. 获取分组后的某一部分数据
grouped=df.groupby(by=['country','state/Province'])['country'].count()
如果需要返回Dataframe数据类型
grouped1=df[['brand']].groupby(by=[df['country'],df['state/Province']])['country'].count() grouped2=groupby(by=[df['country'],df['state/Province']][['brand']].count() grouped3=groupby(by=[df['country'],df['state/Province']].count()[['brand']]
3. 平均值
rating_mean=df['Rating'].mean()
4. 获取某列中去掉重复值数据并转换成列表
Directer=df['directer'].unique()
5. 最大值
max_runtime=df['runtime'].max()
6. 获取最大值索引位置
参考:https://www.cnblogs.com/liulangmao/p/9211537.html
https://baike.baidu.com/item/argmax/6034072?fr=aladdin
max_runtime=df['runtime'].argmax()
7. 分组迭代
当对groupby的列只有单个时(示例根据hobby进行分组),可以 使用 key , value 形式 对分组后的数据进行迭代,其中key 是分组的名称,value是分组的数据;
1 group = frame['name'].groupby(frame['class']) 2 for key , data in group: 3 print(key) 4 print(data)
当对多个列进行分组迭代时,有多少列则需要指定多少个key与其对应,key可以是任何不重复的变量名称
1 group = frame['name'].groupby([frame['class'],frame['age']]) 2 for (key1, key2) , data in group: 3 print(key1,key2) 4 print(data)
8. size()和count()的区别