[英]Explanation about pandas value_counts function
有人可以解釋一下這行是什么
result = data.apply(pd.value_counts).fillna(0)
在這里嗎?
import pandas as pd
from pandas import Series, DataFrame
data = DataFrame({'Qu1': [1, 3, 4, 3, 4],
'Qu2': [2, 3, 1, 2, 3],
'Qu3': [1, 5, 2, 4, 4]})
result = data.apply(pd.value_counts).fillna(0)
In [26]:data
Out[26]:
Qu1 Qu2 Qu3
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4
In [27]:result
Out[28]:
Qu1 Qu2 Qu3
1 1 1 1
2 0 2 1
3 2 2 0
4 2 0 2
5 0 0 1
我認為了解正在發生的事情的最簡單方法是將其分解。
每列一個,value_counts只是計算系列中每個值的出現次數(即4中在Qu1列中出現兩次):
In [11]: pd.value_counts(data.Qu1)
Out[11]:
4 2
3 2
1 1
dtype: int64
當您進行套用時,每列都會與其他結果重新對齊,因為可以看到1到5之間的每個值都與range(1, 6)
對齊:
In [12]: pd.value_counts(data.Qu1).reindex(range(1, 6))
Out[12]:
1 1
2 NaN
3 2
4 2
5 NaN
dtype: float64
您想要計算未看到的值為0而不是NaN,因此,fillna為:
In [13]: pd.value_counts(data.Qu1).reindex(range(1, 6)).fillna(0)
Out[13]:
1 1
2 0
3 2
4 2
5 0
dtype: float64
當您執行Apply時,它會合並針對每一列執行此操作的結果:
In [14]: pd.concat((pd.value_counts(data[col]).reindex(range(1, 6)).fillna(0)
for col in data.columns),
axis=1, keys=data.columns)
Out[14]:
Qu1 Qu2 Qu3
1 1 1 1
2 0 2 1
3 2 2 0
4 2 0 2
5 0 0 1
根據文檔,它會生成非空值的直方圖。 僅Qu1
result
Qu1
列,我們可以知道原始列數據中有一個data.Qu1
和0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.