"""
groupby()表示按某一列或多列进行分组
"""# 返回DataFrameGropyBy的对象
df.groupby('A')# 返回SeriesGroupBy的对象
df.groupby('A')['B']# 返回分组后的平均值
df.groupby('A')['B'].mean()
Out[99]:
A
a 3.33
b 5.00
c 4.00
Name: B, dtype: float64
# 统计个数
df.groupby('A')['B'].size()
Out[104]:
A
a 3
b 2
c 1
Name: B, dtype: int64
# 统计频次
df.groupby('A')['B'].value_counts()
Out[121]:
A B
a 112171
b 2181
c 41
Name: B, dtype: int64
# groupby后的数据为series类型,若要保持DataFrame,请使用as_index参数
df.groupby('A', as_index=False)['B'].value_counts()
A B
0 a 3.331 b 5.002 c 4.00# 统计频次分布
df.groupby('A')['B'].value_counts().unstack()
B
1
2
4
7
8
A
a
1.00
1.00
nan
1.00
nan
b
nan
1.00
nan
nan
1.00
c
nan
nan
1.00
nan
nan
聚合aggregate()
"""
aggregate()或者简写成agg()表示聚合操作,
传入的参数可以为:函数,函数列表,字典
"""# 传入匿名函数,返回分组后的最大值
df.groupby('A').agg(lambda x: np.max(x))
Out[129]:
B C
A
a 7 m
b 8 m
c 4 m
# 传入函数列表
df.groupby('A').agg([np.max, np.min, np.mean])
Out[135]:
B C
A
a 7 m
b 8 m
c 4 m
# 传入字典
df.groupby('A').agg({'B':np.mean,'C':np.max})
Out[138]:
B C
A
a 3.33 m
b 5.00 m
c 4.00 m
部分二
函数
描述
idxmin()
最小值所在的位置,只能作用于Series
idxmax()
最大值所在的位置,只能作用于Series
any()
逻辑或
all()
逻辑与
pct_change()
表示与前一个数据相差的百分比,针对数值型的数据
cumsum()
累计和
cumprod()
累计积
unique()
统计不重复的数据,只能作用于Series
sort_index()
按索引排序
sort_values()
按值排序,只能作用于Series
# 返回最大值所在位置
df1['B'].idxmax()
Out[160]:5# 返回累计和
df1.cumsum()
Out[162]:
A B C
0 a 1 f
1 ab 3 ff
2 abc 7 ffm
3 abca 14 ffmf
4 abcaa 16 ffmfm
5 abcaab 24 ffmfmm
# 返回一个数组
df1['A'].unique()
Out[32]:
array(['a','b','c'], dtype=object)