pandas分组df.groupby(by="A列")分组
-%E5%88%86%E7%BB%84.png&w=3840&q=85)
groupby()分组功能
import numpy as npimport pandas as pddf = pd.DataFrame()ls = [{'名字': '小A', 'd1': 1, 'd2': 3, 'd3': 5},{'名字': '小A', 'd1': 2, 'd2': 4, 'd3': 6},{'名字': '小B', 'd1': 2, 'd2': 4, 'd3': 6},{'名字': '小B', 'd1': 2, 'd2': 4, 'd3': 6},]df = df.append(ls, ignore_index=True)>>> df
|
名字 |
d1 |
d2 |
d3 |
| 0 |
小A |
1 |
3 |
5 |
| 1 |
小A |
2 |
4 |
6 |
| 2 |
小B |
2 |
4 |
6 |
| 3 |
小B |
2 |
4 |
6 |
groupbying = df.groupby(by="名字")>>> groupbying<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000016813E554E0># 查看对象内部的情况>>> list(groupbying)[('小A',名字 d1 d2 d30 小A 1 3 51 小A 2 4 6), ('小B',名字 d1 d2 d32 小B 2 4 63 小B 2 4 6)]>>> list(groupbying)[0]('小A', 名字 d1 d2 d30 小A 1 3 51 小A 2 4 6)>>> list(groupbying)[1]('小B', 名字 d1 d2 d32 小B 2 4 63 小B 2 4 6)>>> type(list(groupbying)[0])<class 'tuple'>>>> type(list(groupbying)[0][0])<class 'str'>>>> list(groupbying)[0][0]'小A'>>> list(groupbying)[0][1] 名字 d1 d2 d30 小A 1 3 51 小A 2 4 6>>> type(list(groupbying)[0][1])<class 'pandas.core.frame.DataFrame'># 遍历.DataFrameGroupBy对象>>> for name,group in groupbying:... print(name)... print(group)...小A 名字 d1 d2 d30 小A 1 3 51 小A 2 4 6小B 名字 d1 d2 d32 小B 2 4 63 小B 2 4 6# 选择>>> groupbying.get_group('小A') 名字 d1 d2 d30 小A 1 3 51 小A 2 4 6# 总数、最大值、最小值、平均值>>> df 名字 d1 d2 d30 小A 1 3 51 小A 2 4 62 小B 2 4 63 小B 2 4 6# df.groupby(["名字1","名字2"])["d1"].agg(["sum","max","min","mean","size"]).reset_index()>>> df.groupby("名字")["d1"].agg(["sum","max","min","mean","size"]).reset_index()
|
名字 |
sum |
max |
min |
mean |
size |
| 0 |
小A |
3 |
2 |
1 |
1.5 |
2 |
| 1 |
小B |
4 |
2 |
2 |
2.0 |
2 |
不用reset_index()也可以用df.columns = ['名字','sum','max'] # 重命名列名