本文记录Pandas内置的聚合方法的使用方式,其中,聚合是指获取多个值并返回单个值的过程。我们以三美股份sh.603379在2021年9月6日至2021年9月17日10个交易日的因子为例,将这些数据保存在df中,打印该df,内容显示如下:
date open high low ... pcfNcfTTM isST zt ss
0 2021-09-06 26.08 27.56 25.58 ... -59.964931 0 False False
1 2021-09-07 28.12 30.26 27.01 ... -65.959245 0 True True
2 2021-09-08 31.35 31.42 29.26 ... -65.719472 0 False False
3 2021-09-09 30.10 30.50 28.85 ... -66.482385 0 False False
4 2021-09-10 30.55 31.99 28.20 ... -67.572260 0 False False
5 2021-09-13 31.58 33.38 30.49 ... -70.841885 0 False False
6 2021-09-14 32.52 35.00 31.44 ... -71.822773 0 False False
7 2021-09-15 33.02 36.25 32.10 ... -79.015949 0 True True
8 2021-09-16 37.90 38.00 35.30 ... -77.381136 0 False False
9 2021-09-17 35.51 39.05 35.51 ... -85.119250 0 True True
[10 rows x 19 columns]
count
功能:统计列或行的元素的个数,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例1:
print(df.count(axis=0))
date 10
open 10
high 10
low 10
close 10
preclose 10
volume 10
amount 10
adjustflag 10
turn 10
tradestatus 10
pctChg 10
peTTM 10
pbMRQ 10
psTTM 10
pcfNcfTTM 10
isST 10
zt 10
ss 10
dtype: int64
当按列统计时,可以看到每一列都有10个元素。
示例2:
print(df.count(axis=1))
0 19
1 19
2 19
3 19
4 19
5 19
6 19
7 19
8 19
9 19
dtype: int64
当按行统计时,可以看到每一行都有19个元素。
示例3:
需要注意的是,count统计的是非空值的个数,如果我们将某个元素置为空值,统计结果也会发生变化。
df.loc[0, 'ss'] = np.nan
print(df.count(axis=0))
date 10
open 10
high 10
low 10
close 10
preclose 10
volume 10
amount 10
adjustflag 10
turn 10
tradestatus 10
pctChg 10
peTTM 10
pbMRQ 10
psTTM 10
pcfNcfTTM 10
isST 10
zt 10
ss 9
dtype: int64
我们把第一行最后一列的值置为空值,可以看到统计结果中,最后一列的统计值减少了1。
mean
功能:求行或列的平均值,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例1:
print(df[['open', 'high', 'low', 'close']].mean())
open 31.673
high 33.341
low 30.374
close 32.567
dtype: float64
取open、high、low、close四列组成的DataFrame,求取各列的平均值。
示例2:
print(df[['open', 'high', 'low', 'close']].mean(axis=1))
0 26.6825
1 28.9125
2 30.5450
3 29.9875
4 30.4350
5 31.9875
6 32.9775
7 34.4050
8 36.6750
9 37.2800
dtype: float64
取open、high、low、close四列组成的DataFrame,求取各行的平均值。
std
功能:求行或列的标准差,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例:
print(df[['open', 'high', 'low', 'close']].std())
open 3.395811
high 3.682003
low 3.289067
close 3.461098
dtype: float64
quantile
功能:取行或列的分位数,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例:
print(df[['open', 'high', 'low', 'close']].quantile(q=0.25))
print(df[['open', 'high', 'low', 'close']].quantile(q=0.50))
print(df[['open', 'high', 'low', 'close']].quantile(q=0.75))
open 30.2125
high 30.7300
low 28.3625
close 30.3200
Name: 0.25, dtype: float64
open 31.465
high 32.685
low 29.875
close 31.750
Name: 0.5, dtype: float64
open 32.8950
high 35.9375
low 31.9350
close 34.8625
Name: 0.75, dtype: float64
取open、high、low、close四列组成的DataFrame,求取各列的较小四分位数、中位数、较大四分位数。
max
功能:按行或列取最大值,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例:
print(df[['open', 'high', 'low', 'close']].max(axis=0))
open 37.90
high 39.05
low 35.51
close 39.05
dtype: float64
min
功能:按行或列取最小值,参数axis=0(默认值)表示按列统计,axis=1表示按行统计。
示例:
print(df[['open', 'high', 'low', 'close']].min(axis=0))
open 26.08
high 27.56
low 25.58
close 27.51
dtype: float64
idxmax
功能:按行或者列取最大值第一次出现时的索引,参数axis=0(默认值)表示按列统计,axis=1表示按行统计,skipna表示是否跳过空值。
示例1:
print(df[['open', 'high', 'low', 'close']].idxmax(axis=0, skipna=True))
open 8
high 9
low 9
close 9
dtype: int64
按列查找最大值的索引,返回的是行index,各列的最大值分别出现在8、9、9、9行。
示例2:
print(df[['open', 'high', 'low', 'close']].idxmax(axis=1, skipna=True))
0 high
1 high
2 high
3 high
4 high
5 high
6 high
7 high
8 high
9 high
dtype: object
按行查找最大值的索引,返回的是列名,很明显各列的最大值均出现在high列。
idxmin
功能:按行或者列取最小值第一次出现时的索引,参数axis=0(默认值)表示按列统计,axis=1表示按行统计,skipna表示是否跳过空值。
示例:
print(df[['open', 'high', 'low', 'close']].idxmin(axis=1, skipna=True))
0 low
1 low
2 low
3 low
4 low
5 low
6 low
7 low
8 low
9 open
dtype: object
使用方法与idxmax基本相同,示例中,按行查找最小值的索引,最后一行返回的索引open,而非low,这是由于在这一行,open值和low值相同,且均为最小值,而open先出现,所以返回第一次出现的最小值的索引open。