我想計算整個資料框中多列中字串值的出現次數,例如:
df = pd.DataFrame({'type1':['A11','B11','A11','A'],
'type2':['A12','C','A12','D11'],
'type3':['C','D11','B','D12'],
'type4':[np.nan,'E12','C','E']
})
df
type1 type2 type3 type4
0 A11 A12 C NaN
1 B11 C D11 E12
2 A11 A12 B C
3 A D11 D12 E
我希望能夠計算這 4 列中的每個不同值,例如:
value count
A11 2
A12 2
C 3
B11 1
D11 2
D12 1
E12 3
B 1
A 1
E 1
uj5u.com熱心網友回復:
df.stack().value_counts()
C 3
A11 2
A12 2
D11 2
B11 1
E12 1
B 1
A 1
D12 1
E 1
如果您需要名稱:
df.stack().value_counts().reset_index(name='count').rename({'index':'value'}, axis = 1)
value count
0 C 3
1 A11 2
2 A12 2
3 D11 2
4 B11 1
5 E12 1
6 B 1
7 A 1
8 D12 1
9 E 1
uj5u.com熱心網友回復:
你可以這樣做:
df1 = df.apply(pd.Series.value_counts).dropna(how='all').sum(1).reset_index()
df1.rename(columns = {'index':'value', 0:'count'}, inplace = True)
df1
輸出:
| 指數 | 價值 | 數數 |
|---|---|---|
| 0 | 一個 | 1.0 |
| 1 | A11 | 2.0 |
| 2 | A12 | 2.0 |
| 3 | 乙 | 1.0 |
| 4 | B11 | 1.0 |
| 5 | C | 3.0 |
| 6 | D11 | 2.0 |
| 7 | D12 | 1.0 |
| 8 | 乙 | 1.0 |
| 9 | E12 | 1.0 |
uj5u.com熱心網友回復:
另一種方法:這種方法的優點是,如果想要繼續了解基于 、 等的資料type1,type2只需reset_index()在步驟 2 中進行。
原始資料
df = pd.DataFrame({'type1':['A11','B11','A11','A'],
'type2':['A12','C','A12','D11'],
'type3':['C','D11','B','D12'],
'type4':[np.nan,'E12','C','E']
})
堆疊資料:
df1 = pd.DataFrame(df.stack(), columns = ['colnam'])
然后根據所需列分組:
print(df1.groupby('colnam')['colnam'].count())
uj5u.com熱心網友回復:
您可以使用 展平您的值numpy.reshape,然后創建一個新的資料框并用于pd.DataFrame.value_counts獲取您的輸出:
pd.DataFrame(df.values.reshape(1,-1)[0], columns = ['type']).value_counts()
輸出:
type
C 3
A11 2
A12 2
D11 2
A 1
B 1
B11 1
D12 1
E 1
E12 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486113.html
標籤:Python 熊猫 数据框 通过...分组 熊猫-groupby
