groupby概述
GroupBy对象属性
groupby过程拆解
以groupby(by="company")为例:
三步走
1.Splitting
主要靠groupby
split index (rows)
split columns (rows)
语法糖:
df.groupby('A') is just syntactic sugar fordf.groupby(df['A'])
grouped=df.groupby(['A']);grouped_C=grouped['C'] is just syntactic sugar for df['C'].groupby(df['A'])
DataFrame column selection in GroupBy
2.Applying
操作类型分类
应用时的输入
列(或行)
函数应用于整个列,输出每组的列为一个结果,应用于整个列
函数应用于整个列,输出每组的列为大小不变,应用于列中的单个元素
整个分组
函数作为于整个分组,输出一个值,比如GroupBy.aggregate()或GroupBy.agg()
与操作类型或函数功能有关
相关函数
外加:groupBy.filter()
groupby的applying与pandas函数式编程
groupby的applying有3种类型:
pandas函数式编程有3种操作层次:DataFrame,Series(row-or column-wise),or elementwise
3.Combining
一般结果自动combining
group操作
显示分组效果
for name,group in grouped:
print(name)
print(group)
print()
同时对多列进行运算
df['col3'] = df.apply(lambda x: x['col1'] +2 * x['col2'], axis=1)
删除大小为0的分组
dff.groupby('B').filter(lambda x: len(x) >0)
分组统计结果
print(grouped.apply(lambda x:x.describe()))
遍历各分组
import pandas as pd
if __name__ == "__main__":
dict_list = [{"a":"A", "b":2}, {"a":"A", "b":4}, {"a":"B", "b":6}]
df = pd.DataFrame(dict_list)
print(">>>")
print(df)
print()
grouped = df.groupby("a")
for idx, group in grouped:
print(">>>")
print("idx: \n", idx)
print("group: \n", group)
print()
# print(grouped.groups)
# print(grouped.indices)
# print(grouped.get_group("A"))