常用的數(shù)學(xué)和統(tǒng)計(jì)方法
pandas
對(duì)象擁有一組常用的數(shù)學(xué)和統(tǒng)計(jì)方法男杈。他們大都屬于約簡(jiǎn)和匯總統(tǒng)計(jì)拌屏,用于從Series
提取單個(gè)值(如sum
或mean
)或從DataFrame
的行或列中提取一個(gè)Series
庞溜。它們都是基于沒有缺失數(shù)據(jù)的假設(shè)而構(gòu)建的。
例:
In [4]: df = DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
In [5]: df
Out[5]:
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
In [6]: df.sum()
Out[6]:
one 9.25
two -5.80
dtype: float64
In [7]: df.sum(axis=1)
Out[7]:
a 1.40
b 2.60
c 0.00
d -0.55
dtype: float64
NA
值會(huì)自動(dòng)被排除芦昔,除非整個(gè)切片都是NA
栽惶。通過(guò)skipna(skip NA)
選項(xiàng)可以禁用該功能:
In [8]: df.mean(axis=1, skipna=False)
Out[8]:
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
約簡(jiǎn)方法的選項(xiàng):axis
、skipna
芍殖、level
(如果軸是層次化索引的豪嗽,則根據(jù)level
分組約簡(jiǎn))。
有些方法(如idxmin
和idxmax
)返回的是間接統(tǒng)計(jì)(比如達(dá)到最小值最大值的索引):
In [9]: df.idxmax()
Out[9]:
one b
two d
dtype: object
有些方法則是累計(jì)型的:
In [10]: df.cumsum()
Out[10]:
one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
還有一些豌骏,比如describe
龟梦,用于一次性產(chǎn)生多個(gè)匯總統(tǒng)計(jì):
In [11]: df.describe()
Out[11]:
one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
對(duì)于非數(shù)值型數(shù)據(jù),describe
會(huì)產(chǎn)生另外一種匯總統(tǒng)計(jì):
In [12]: obj = Series(['a', 'a', 'b', 'c'] * 4)
In [14]: obj.describe()
Out[14]:
count 16
unique 3
top a
freq 8
dtype: object
所有與描述統(tǒng)計(jì)相關(guān)的方法:見#2467
相關(guān)系數(shù)與協(xié)方差(?):
通過(guò)參數(shù)對(duì)計(jì)算出來(lái)的:
Series
的corr
方法用來(lái)計(jì)算兩個(gè)Series
中重疊的窃躲、非NA
的计贰、按索引對(duì)齊的值的相關(guān)系數(shù),cov
用于計(jì)算協(xié)方差:
In [39]: test.describe()
Out[39]:
Open High Low Close Adj Close \
count 1594.000000 1594.000000 1594.000000 1594.000000 1594.000000
mean 4.681644 4.759398 4.611951 4.688137 4.515610
std 1.280538 1.327283 1.237487 1.285679 1.240624
min 2.980000 2.990000 2.960000 2.980000 2.886848
25% 3.550000 3.580000 3.510000 3.550000 3.433305
50% 4.545000 4.605000 4.470000 4.540000 4.412471
75% 5.450000 5.540000 5.360000 5.450000 5.212986
max 10.430000 10.740000 9.850000 10.540000 10.383811
Volume
count 1.594000e+03
mean 1.460281e+08
std 1.729750e+08
min 0.000000e+00
25% 5.921724e+07
50% 9.124301e+07
75% 1.464500e+08
max 1.644112e+09
In [40]: returns.tail()
Out[40]:
000001.SS 399001.SZ
Date
2016-12-26 0.003992 0.003290
2016-12-27 -0.002532 -0.000278
2016-12-28 -0.003990 -0.004243
2016-12-29 -0.001979 -0.002720
2016-12-30 0.002435 0.001741
In [41]: returns['000001.SS'].corr(returns['399001.SZ'])
Out[41]: 0.93169755572940594
In [42]: returns['000001.SS'].cov(returns['399001.SZ'])
Out[42]: 0.00023805940957128392
DataFrame
的corr
和cov
方法將以DataFrame
的形式返回完整的相關(guān)系數(shù)或協(xié)方差矩陣:
In [43]: returns.corr()
Out[43]:
000001.SS 399001.SZ
000001.SS 1.000000 0.931698
399001.SZ 0.931698 1.000000
In [44]: returns.cov()
Out[44]:
000001.SS 399001.SZ
000001.SS 0.000217 0.000238
399001.SZ 0.000238 0.000301
利用DataFrame
的corrwith
方法蒂窒,可以計(jì)算其列或行跟另一個(gè)Series
或DataFrame
之間的相關(guān)系數(shù)躁倒。
傳入一個(gè)Series
將會(huì)返回一個(gè)相關(guān)系數(shù)值Series
(針對(duì)各列進(jìn)行計(jì)算):
In [46]: returns.corrwith(returns['000001.SS'])
Out[46]:
000001.SS 1.000000
399001.SZ 0.931698
dtype: float64
傳入一個(gè)DataFrame
則會(huì)計(jì)算按列名配對(duì)的相關(guān)系數(shù):
這里計(jì)算百分比變化與成交量的相關(guān)系數(shù):
In [47]: returns.corrwith(volume)
Out[47]:
000001.SS 0.066091
399001.SZ -0.007895
dtype: float64
唯一值(unique)、值計(jì)數(shù)(value_counts)以及成員資格(isin):
從一維Series
的值中抽取信息:
例:
In [48]: obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
In [49]: uniques = obj.unique()
In [50]: uniques
Out[50]: array(['c', 'a', 'd', 'b'], dtype=object)
value_counts
用于計(jì)算一個(gè)Series
中各值出現(xiàn)的頻率:
結(jié)果是按值頻率降序排列:
In [51]: obj.value_counts()
Out[51]:
c 3
a 3
b 2
d 1
dtype: int64
isin
用于判斷矢量化集合的成員資格洒琢,可用于選取子集:
In [52]: mask = obj.isin(['b', 'c'])
In [53]: mask
Out[53]:
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
In [54]: obj[mask]
Out[54]:
0 c
5 b
6 b
7 c
8 c
dtype: object