中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python利用panda實現列聯表的案例

發布時間:2021-02-14 17:48:46 來源:億速云 閱讀:554 作者:小新 欄目:開發技術

這篇文章主要介紹了python利用panda實現列聯表的案例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

交叉表(cross-tabulation,簡稱crosstab)是?種?于計算分組頻率的特殊透視表。

語法詳解:

pd.crosstab(index, # 分組依據
   columns, # 列
   values=None, # 聚合計算的值
   rownames=None, # 列名稱
   colnames=None, # 行名稱
   aggfunc=None, # 聚合函數
   margins=False, # 總計行/列
   dropna=True, # 是否刪除缺失值
   normalize=False # 
   )

1 crosstab() 實例1

1.1 讀取數據

import os
import numpy as np
import pandas as pd

file_name = os.path.join(path, 'Excel_test.xls')
df = pd.read_excel(io=file_name, # 工作簿路徑
     sheetname='透視表', # 工作表名稱
     skiprows=1, # 要忽略的行數
     parse_cols='A:D' # 讀入的列
     )
df

python利用panda實現列聯表的案例

1.2 pd.crosstab() 默認生成以行和列分類的頻數表

pd.crosstab(df['客戶名稱'], df['產品類別'])

python利用panda實現列聯表的案例

1.3 設置跟多參數實現分類匯總

pd.crosstab(index=df['客戶名稱'],
   columns=df['產品類別'],
   values=df['銷量'],
   aggfunc='sum',
   margins=True
   ).round(0).fillna(0).astype('int')

python利用panda實現列聯表的案例

注:因為交叉表示透視表的特例,所以交叉表可以用透視表的函數實現。又因為透視表可以用更 python 的方式 groupby-apply 實現,所以,交叉表完全可以用 groupby-apply 的方式實現。

2 用分類匯總的方法實現 交叉表

df.groupby(['客戶名稱', '產品類別']).apply(sum)

python利用panda實現列聯表的案例

2.1 分類匯總、重新索引、設置數值格式綜合應用

c_tbl = df.groupby(['客戶名稱', '產品類別']).apply(sum)['銷量'].unstack()
c_tbl['總計'] = c_tbl.sum(axis=1) # 添加總計列
c_tbl.fillna(0).round(0).astype('int')

python利用panda實現列聯表的案例

軟件信息:

python利用panda實現列聯表的案例

補充:使用python(pandas)將數據處理成交叉分組表

交叉分組表是匯總兩種變量數據的方法, 在很多場景可以用到, 本文會介紹如何使用pandas將包含兩個變量的數據集處理成交叉分組表.

環境

pandas

python 2.7

原理

用坐標軸來進行比喻, 其中一個變量作為x軸, 另一個作為y軸, 如果定位到數據則累加一, 將所有數據遍歷一遍, 最后的坐標軸就是一張交叉分組表(使用坐標軸展示的數據一般是連續的, 交叉分組表的數據是離散的).

具體實現

示例數據:

quality price
0  bad 18
1  bad 17
2  great  52
3  good  28
4  excellent  88
5  great  63
6  bad 8
7  good  22
8  good  68
9  excellent  98
10 great  53
11 bad 13
12 great  62
13 good  48
14 excellent  78
15 great  63
16 good  37
17 great  69
18 good  28
19 excellent  81
20 great  43
21 good  32
22 great  62
23 good  28
24 excellent  82
25 great  53

代碼:

  import pandas as pd
  from pandas import DataFrame, Series
  #生成數據
  df = DataFrame([['bad', 18], ['bad', 17], ['great', 52], ['good', 28], ['excellent', 88], ['great', 63]
        , ['bad', 8], ['good', 22], ['good', 68], ['excellent', 98], ['great', 53]
        , ['bad', 13], ['great', 62], ['good', 48], ['excellent', 78], ['great', 63]
        , ['good', 37], ['great', 69], ['good', 28], ['excellent', 81], ['great', 43]
        , ['good', 32], ['great', 62], ['good', 28], ['excellent', 82], ['great', 53]], columns = ['quality', 'price'])
#廣播使用的函數
def quality_cut(data):
  s = Series(pd.cut(data['price'], np.arange(0, 100, 10)))
  return pd.groupby(s, s).count()
#進行分組處理
df.groupby(df['quality']).apply(quality_cut)

結果:

python利用panda實現列聯表的案例

交叉分組

詳細分析

從邏輯上來看, 為了達到對示例數據的交叉分組, 需要完成以下工作:

將數據以quality列進行分組.

將每個分組的數據分別進行cut, 以10為間隔.

將cut過的數據, 以cut的范圍為列進行分組

將所有數據組合到一起, row為quality, columns為cut的范圍

步驟1, pandasgroupby(...)接口, 會按照指定的列進行分組處理, 每一個分組, 存儲相同類別的數據

<class 'pandas.core.frame.DataFrame'>
  quality price
0   bad   18
1   bad   17
6   bad   8
11   bad   13

而我們需要的, 只是price這列的數據, 所以單獨將這列拿出來, 進行cut, 最后得到我們要的series(步驟2, 步驟3)

  price
(0, 10]   1
(10, 20]  3
(20, 30]  0
(30, 40]  0
(40, 50]  0
(50, 60]  0
(60, 70]  0
(70, 80]  0
(80, 90]  0

使用pandas

apply()的廣播特性, 每一個分組的數據都會經過上述幾個步驟的處理, 最后與第一次分組row進行組合.

后記

估計能力有限, 這個問題想了很長時間, 沒想到pandas這么可以這么方便達成交叉分組的效果. 思考的時候主要是卡在數據組合上, 當數據量很大時通過多個步驟進行數據組合, 肯定是低效而且錯誤的. 最后仔細研究了groupby, dataframe, series, dataframeIndex等數據模型, 使用廣播特性用幾句代碼就完成了. 證明了pandas的高性能, 也提醒自己遇見問題一定要耐心分析。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“python利用panda實現列聯表的案例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永吉县| 南乐县| 伊宁县| 宜阳县| 舒城县| 手机| 峨边| 莲花县| 抚顺市| 滕州市| 大埔区| 梨树县| 清流县| 潞西市| 台湾省| 密云县| 甘南县| 建阳市| 彭泽县| 建宁县| 绥滨县| 万全县| 深水埗区| 桃园市| 贵定县| 中山市| 阳山县| 息烽县| 东安县| 莱芜市| 赤峰市| 隆德县| 商丘市| 临城县| 榆社县| 泸西县| 通辽市| 横峰县| 万源市| 达拉特旗| 麻城市|