>>> from env_helper import info; info()
页面更新时间: 2024-01-17 14:51:25
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

7.5. Pandas统计函数

统计方法有助于理解和分析数据的行为。现在我们将学习一些统计函数,可以将这些函数应用到Pandas的对象上。

7.5.1. pct_change()函数

系列,DatFrames和Panel都有pct_change()函数。此函数将每个元素与其前一个元素进行比较,并计算变化百分比。

>>> import pandas as pd
>>> import numpy as np
>>> s = pd.Series([1,2,3,4,5,4])
>>> print (s.pct_change())
>>>
>>> df = pd.DataFrame(np.random.randn(5, 2))
>>> print (df.pct_change())
0         NaN
1    1.000000
2    0.500000
3    0.333333
4    0.250000
5   -0.200000
dtype: float64
           0           1
0        NaN         NaN
1  -2.309226   -0.919491
2 -13.257666  113.896190
3  -0.171702   -0.942886
4  -1.286095   10.526630

默认情况下, pct_change() 对列进行操作; 如果想应用到行上,那么可使用 axis = 1 参数。

7.5.2. 协方差

协方差适用于系列数据。Series对象有一个方法 cov 用来计算序列对象之间的协方差。 NA 将被自动排除。

Cov系列示例

>>> import pandas as pd
>>> import numpy as np
>>> s1 = pd.Series(np.random.randn(10))
>>> s2 = pd.Series(np.random.randn(10))
>>> print (s1.cov(s2))
-0.22803111685367083

当应用于DataFrame时,协方差方法计算所有列之间的协方差(cov)值。

>>> import pandas as pd
>>> import numpy as np
>>> frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
>>> print (frame['a'].cov(frame['b']))
>>> print (frame.cov())
-0.004463981038269736
          a         b         c         d         e
a  0.550077 -0.004464  0.204810 -0.081978 -0.088684
b -0.004464  0.519454 -0.269390  0.032218 -0.170024
c  0.204810 -0.269390  0.833408  0.285680 -0.258508
d -0.081978  0.032218  0.285680  0.728817  0.091945
e -0.088684 -0.170024 -0.258508  0.091945  1.230488

注 - 观察第一个语句中a和b列之间的cov结果值,与由DataFrame上的cov返回的值相同。

7.5.3. 相关性

相关性显示了任何两个数值(系列)之间的线性关系。有多种方法来计算pearson(默认),spearman和kendall之间的相关性。

>>> import pandas as pd
>>> import numpy as np
>>> frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
>>>
>>> print (frame['a'].corr(frame['b']))
>>> print (frame.corr())
0.5077121404876863
          a         b         c         d         e
a  1.000000  0.507712 -0.476954  0.287796  0.181337
b  0.507712  1.000000 -0.164517 -0.249892 -0.050917
c -0.476954 -0.164517  1.000000 -0.152443 -0.362946
d  0.287796 -0.249892 -0.152443  1.000000  0.340753
e  0.181337 -0.050917 -0.362946  0.340753  1.000000

如果DataFrame中存在任何非数字列,则会自动排除。

7.5.4. 数据排名

数据排名为元素数组中的每个元素生成排名。在关系的情况下,分配平均等级。

>>> import pandas as pd
>>> import numpy as np
>>> s = pd.Series(np.random.randn(5), index=list('abcde'))
>>>
>>> s['d'] = s['b'] # so there's a tie
>>>
>>> print (s.rank())
a    1.0
b    4.5
c    2.0
d    4.5
e    3.0
dtype: float64

Rank可选地使用一个默认为true的升序参数; 当错误时,数据被反向排序,也就是较大的值被分配较小的排序。

Rank支持不同的 tie-breaking 方法,用方法参数指定

  • average - 并列组平均排序等级

  • min - 组中最低的排序等级

  • max - 组中最高的排序等级

  • first - 按照它们出现在数组中的顺序分配队列