pandas之分組統(tǒng)計(jì)列聯(lián)表pd.crosstab()問題
pandas分組的統(tǒng)計(jì)方式
index | 減肥方式 | 血壓含量 |
0 | 藥物 | 高 |
1 | 飲食 | 低 |
2 | 鍛煉 | 正常 |
3 | 抽脂 | 高 |
4 | 藥物 | 高 |
5 | 抽脂 | 正 |
... | ||
498 | 藥物 | 低 |
499 | 飲食 | 高 |
我們需要統(tǒng)計(jì)多個(gè)字段的次數(shù)
如下表數(shù)據(jù):
減肥方式 \血壓含量 | 藥物 | 飲食 | 鍛煉 | 抽脂 | 總和 |
高 | 50 | 38 | 38 | 30 | 156 |
正常 | 46 | 40 | 40 | 45 | 171 |
低 | 37 | 44 | 37 | 55 | 173 |
總和 | 133 | 122 | 115 | 130 | 500 |
通常多個(gè)組的統(tǒng)計(jì)可以采用
DataFrame.groupby(by=['減肥方式','血壓含量'])['減肥方式'].count().reset_index(name='次數(shù)')
這里我們能看到我們采用分組統(tǒng)計(jì)之后,能詳細(xì)看到表格的統(tǒng)計(jì),但是卻不利于開發(fā)的統(tǒng)計(jì)
附下,采用分組統(tǒng)計(jì)的方式
def list_set(list_1): list_2 = list(set(list_1)) list_2.sort(key=list_1.index) return list_2 def func(df,df_title_X,df_title_Y): df_data = df.groupby(by=[df_title_X,df_title_Y])[df_title_X].count().reset_index(name='次數(shù)') data_dict = {} for i in df_data[df_data.columns[0]]: data_dict[i] = {} for a in df_data[df_data.columns[1]]: data_dict[i][a] = {} for i in range(df_data.shape[0]): data_dict[df_data[df_data.columns[0]].loc[i]][df_data[df_data.columns[1]].loc[i]] = df_data[df_data.columns[2]].loc[i] l = [list(i.values()) for i in data_dict.values()] return pd.DataFrame(np.array(l).T,columns=list_set(df_data[df_title_X].to_list()), index=list_set(df_data[df_title_X].to_list())) print(func(df,'減肥方式','血壓含量'))
結(jié)果如下:
在查閱pandas的官方文檔之后,我們了解到了這種叫做列聯(lián)表,pandas.crosstab()的函數(shù)
import pandas as pd pd.crosstab()
print(pd.crosstab(df['血壓含量'],df['減肥方式'],margins=True,margins_name='總和')) print(pd.crosstab(df['血壓含量'],df['減肥方式'],margins=True,margins_name='總和').to_dict())
后續(xù)還有透視表pandas.pivot_table(),就自行查看pandas的官方文檔。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pycharm激活方法及詳細(xì)教程(詳細(xì)且實(shí)用)
這篇文章主要介紹了Pycharm激活方法及詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-05-05使用Python3+PyQT5+Pyserial 實(shí)現(xiàn)簡單的串口工具方法
今天小編就為大家分享一篇使用Python3+PyQT5+Pyserial 實(shí)現(xiàn)簡單的串口工具方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02如何在Flask中實(shí)現(xiàn)數(shù)據(jù)分組流程詳解
在Flask中,數(shù)據(jù)分組是指將一組數(shù)據(jù)按照某種方式進(jìn)行分類,以便更好地對數(shù)據(jù)進(jìn)行處理和展示,可以使用Python內(nèi)置的itertools模塊中的groupby方法,或者使用SQL語句中的GROUP?BY子句來實(shí)現(xiàn)數(shù)據(jù)分組,這篇文章介紹了在Flask中實(shí)現(xiàn)數(shù)據(jù)分組,感興趣的同學(xué)可以參考下文2023-05-05Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園
這篇文章主要介紹了Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python使用pydub庫對mp3與wav格式進(jìn)行互轉(zhuǎn)的方法
今天小編就為大家分享一篇Python使用pydub庫對mp3與wav格式進(jìn)行互轉(zhuǎn)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01