看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
从 DataFrame 创建 GroupBy 对象,我们就了一个原材料,这个原材料我们可以灵活地根据我们的需求进行分析处理。
有了 GroupBy 对象,可能希望对每个列进行不同的操作,使用类似于 []
从 DataFrame 获取列:
grouped = df.groupby(['team'])
grouped_C = grouped['C']
grouped_D = grouped['D']
也可以先选择列,再进行分组,返回一个序列分组对象:
df['Q1'].groupby(df['team'])
# SeriesGroupBy
df.groupby('team').groups # 显示所有分组
grouped.get_group('A') # 选择指定分组
# 多层索引的选择
grouped2 = df.groupby(['team', 'Q1'])
grouped2.get_group(('A', 57))
以下将迭代出分组名和分组内容:
for name, group in grouped:
print(name)
print(group)
分组后会按分组字段进行排序(见上例索引示例),如果不想这样排序可以sort=False
则会按内容首次出现的顺序显示:
df.groupby('team', sort=False, as_index=False).sum()
'''
team Q1 Q2 Q3 Q4
0 E 963 1013 881 1033
1 C 1056 1194 1068 1127
2 A 1066 639 875 783
3 D 860 1191 1241 1199
4 B 975 1218 1202 1136
'''
# 以下部分需要聚合统计方法才能显示结果
# 选择列 返回一个SeriesGroupBy
df.groupby('team')['Q1']
df.groupby('team').all()
df.groupby('team').any()
grouped.backfill()
grouped.bfill()
df.groupby('team').head() # 每组显示前5个
grouped.tail(1) # 每组最后一个
grouped.rank() # 排序值
grouped.fillna(0)
grouped.indices # 字典 {分组名 -> 索引}.
# 分组中的第几个值,分组子集查询
gp.nth(1) # 第一个
gp.nth(-1) # 最后一个
gp.nth([-2, -1])
# 第 n 个非空项
gp.nth(0, dropna='all')
gp.nth(0, dropna='any')
# 可使用切片 1.4+ 版本
gp.nth[1:-1] # 选择指定行
gp.nth[1, -1] # 指定行列索引
gp.nth[:1, -1:] # 开区间
gp.nth(slice(1, -1)) # 内置函数写法
gp.nth([slice(None, 1), slice(-1, None)])
df.groupby('team').shift(-1) # 组内移动
grouped.tshift(1) # 按时间周期移动
df.groupby('team').any()
df.groupby('team').all()
df.groupby('team').rank() # 在组内的排名
# 仅 SeriesGroupBy 可用
# 每组最大的两个
df.groupby("team").Q1.nlargest(2)
df.groupby("team").Q1.nsmallest(2)
df.groupby("team").Q1.nunique() # 每组去重数量
df.groupby("team").Q1.unique() # 每组去重值
df.groupby("team").Q1.value_counts() # 每组去重值及数量
df.groupby("team").Q1.is_monotonic_increasing # 每组值是否单调递增
df.groupby("team").Q1.is_monotonic_decreasing # 每组值是否单调递减
# 仅 DataFrameGroupBy 可用
df.groupby("team").corrwith(df2) # 相关性
gp.plot() # 各组的折线图
gp.plot.bar() #
df.groupby('team').hist() # 直方图
df.groupby('team').boxplot() # 箱线图
df.boxplot(by="team") # 同上
更新时间:2022-05-08 09:45:17 标签:pandas 分组