最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas數(shù)據(jù)分析之pandas數(shù)據(jù)透視表和交叉表

 更新時(shí)間:2022年08月12日 10:25:41   作者:阡之塵埃  
這篇文章主要介紹了Pandas數(shù)據(jù)分析之pandas數(shù)據(jù)透視表和交叉表,pandas對(duì)數(shù)據(jù)框也可以像excel一樣進(jìn)行數(shù)據(jù)透視表整合之類的操作。主要是針對(duì)分類數(shù)據(jù)進(jìn)行操作,還可以計(jì)算數(shù)值型數(shù)據(jù),去滿足復(fù)雜的分類數(shù)據(jù)整理的邏輯

前言

pandas對(duì)數(shù)據(jù)框也可以像excel一樣進(jìn)行數(shù)據(jù)透視表整合之類的操作。主要是針對(duì)分類數(shù)據(jù)進(jìn)行操作,還可以計(jì)算數(shù)值型數(shù)據(jù),去滿足復(fù)雜的分類數(shù)據(jù)整理的邏輯。

首先還是導(dǎo)入包:

import numpy as np
import pandas as pd

整理透視 pivot 

首先介紹的是最簡(jiǎn)單的整理透視函數(shù)pivot,其原理如圖:

pivot參數(shù):

  • index:新 df 的索引列,用于分組,如果為None,則使用現(xiàn)有索引
  • columns:新 df 的列,如果透視后有重復(fù)值會(huì)報(bào)錯(cuò)
  • values:用于填充 df 的列。 如果未指定,將使用所有剩余的列,并且結(jié)果將具有按層次結(jié)構(gòu)索引的列

用法如下,首先生成案例數(shù)據(jù)df

df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
                   'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'baz': [1, 2, 3, 4, 5, 6],
                   'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
df

df.pivot(index='foo', columns='bar', values='baz')

可以看到是一一對(duì)應(yīng)。簡(jiǎn)單來(lái)說(shuō)就是把foo、bar兩個(gè)分類變量整到行列名稱上去了,baz作為值

# 多層索引,可以取其中一列
df.pivot(index='foo', columns='bar') #['baz']

# 指定值
df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])

聚合透視 Pivot Table

上面的pivot只適用于一一對(duì)應(yīng)的情況,如果分類變量的組合一樣,但是取值不一樣就會(huì)報(bào)錯(cuò)。此時(shí)應(yīng)該用Pivot Table,他默認(rèn)計(jì)算相同情況的均值。

參數(shù):

  • data: 要透視的 DataFrame 對(duì)象
  • values: 要聚合的列或者多個(gè)列
  • index: 在數(shù)據(jù)透視表索引上進(jìn)行分組的鍵
  • columns: 在數(shù)據(jù)透視表列上進(jìn)行分組的鍵
  • aggfunc: 用于聚合的函數(shù), 默認(rèn)是 numpy.mean'''
df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"],
                   "B": ["b2", "b2", "b1", "b1", "b1","b1"],
                   "C": ['c1','c1','c2','c2','c1','c1'],
                   "D": [1, 2, 3, 4, 5, 6]})
df

#索引a,列b使用Pivot會(huì)報(bào)錯(cuò),因?yàn)樗麄冎g的組合有重復(fù),要用Pivot Table,默認(rèn)計(jì)算均值
pd.pivot_table(df,index='A',columns='B',values='D')

#驗(yàn)證一下b1,a2這個(gè)均值5
df.loc[(df.A=='a2')&(df.B=='b1')].D.mean()

 聚合透視高級(jí)操作

pd.pivot_table(df,index=['A','B'],#指定多個(gè)索引
               columns=['C'],  #指定列
               values='D', #數(shù)據(jù)值列
               aggfunc=np.sum, #聚合函數(shù)
               fill_value=0, #空值填充
               margins=True  #增加匯總列
              )

 #多個(gè)計(jì)算方法

pd.pivot_table(df,index=['A','B'],#指定多個(gè)索引
               columns=['C'],  #指定列
               values='D', #數(shù)據(jù)值列
               aggfunc=[np.sum,np.mean,np.std]
              )

交叉表crosstab()

交叉表是用于統(tǒng)計(jì)分組頻率的特殊透視表。簡(jiǎn)單來(lái)說(shuō),就是將兩個(gè)或者多個(gè)列重中不重復(fù)的元素組成一個(gè)新的 DataFrame,新數(shù)據(jù)的行和列交叉的部分值為其組合在原數(shù)據(jù)中的數(shù)量

語(yǔ)法結(jié)構(gòu)如下:

pd.crosstab(index, columns, values=None, rownames=None,colnames=None, aggfunc=None, margins=False,
margins_name: str = 'All', dropna: bool = True,normalize=False) #→ 'DataFrame'

參數(shù)說(shuō)明:

index:類數(shù)組,在行中按分組的值。
columns:類數(shù)組的值,用于在列中進(jìn)行分組。
values:類數(shù)組的,可選的,要根據(jù)因素匯總的值數(shù)組。
aggfunc:函數(shù),可選,如果未傳遞任何值數(shù)組,則計(jì)算頻率表。
rownames:序列,默認(rèn)為None,必須與傳遞的行數(shù)組數(shù)匹配。
colnames:序列,默認(rèn)值為None,如果傳遞,則必須與傳遞的列數(shù)組數(shù)匹配。
margins:布爾值,默認(rèn)為False,添加行/列邊距(小計(jì))
normalize:布爾值,{'all','index','columns'}或{0,1},默認(rèn)為False。 通過(guò)將所有值除以值的總和進(jìn)行歸一化。'

生成案例數(shù)據(jù):

df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"],
                   "B": ["b2", "b2", "b1", "b1", "b1","b1"],
                   "C": ['c1','c1','c2','c2','c1','c1'],
                   "D": [1, 2, 3, 4, 5, 6]})
df

pd.crosstab(df['A'],df['B'])  #都是分類數(shù)據(jù),計(jì)算頻率

pd.crosstab(df['A'],df['C']) #都是分類數(shù)據(jù)

#對(duì)交叉結(jié)果進(jìn)行歸一化:
pd.crosstab(df['A'], df['B'], normalize=True)

#對(duì)每列進(jìn)行歸一化:
pd.crosstab(df['A'], df['B'], normalize='columns')

#聚合,指定列做為值,并將這些值按一定算法進(jìn)行聚合:
pd.crosstab(df['A'], df['C'], values=df['D'], aggfunc=np.sum) #分類和數(shù)值

#邊距匯總,在最右邊增加一個(gè)匯總列:
pd.crosstab(df['A'], df['B'],values=df['D'],aggfunc=np.sum,
            normalize=True,margins=True)

數(shù)據(jù)融合melt()

#df.melt() 是 df.pivot() 逆轉(zhuǎn)操作函數(shù)。簡(jiǎn)單說(shuō)就是將指定的列放到鋪開(kāi)放到行上名為variable(可指定)列,值在value(可指定)列 

語(yǔ)法結(jié)構(gòu):

具體語(yǔ)法結(jié)構(gòu)如下:

pd.melt(frame: pandas.core.frame.DataFrame,id_vars=None, value_vars=None,
? ? ? ? var_name='variable', value_name='value',col_level=None)

其中:

  • id_varstuple:list或ndarray(可選),用作標(biāo)識(shí)變量的列。
  • value_varstuple:列表或ndarray,可選,要取消透視的列。 如果未指定,則使用未設(shè)置為id_vars的所有列。
  • var_namescalar:用于“變量”列的名稱。 如果為None,則使用frame.columns.name或“variable”。
  • value_namescalar:默認(rèn)為“ value”,用于“ value”列的名稱。
  • col_levelint或str:可選,如果列是MultiIndex,則使用此級(jí)別來(lái)融化。

生成案例數(shù)據(jù):

df=pd.DataFrame({'A':['a1','a2','a3','a4','a5'],
                'B':['b1','b2','b3','b4','b5'],
                'C':[1,2,3,4,5]})
df

pd.melt(df)

#指定標(biāo)識(shí)和值,
pd.melt(df,id_vars=['A'])  #只對(duì)BC展開(kāi)

pd.melt(df,value_vars=['B','C']) #保留BC,并展開(kāi)

#同時(shí)指定,并命名
pd.melt(df,id_vars=['A'],value_vars=['B'],var_name='B_label',value_name='B_value') 

數(shù)據(jù)堆疊 stack

#stack就是把列變量堆到行上,unstack就是行變到列上

生成案例數(shù)據(jù) :

#堆疊 stack 單層索引:
df = pd.DataFrame({'A':['a1','a1','a2','a2'],
                  'B':['b1','b2','b1','b2'],
                  'C':[1,2,3,4],
                  'D':[5,6,7,8],
                  'E':[5,6,7,8]})
df.set_index(['A','B'],inplace=True)
df

 stack 堆疊

df.stack()

 unstack 解堆

df.stack().unstack()

df.stack().unstack().unstack()

df.stack().unstack().unstack().unstack()

 可以看到,解堆就是不停地把列變量弄到行上去作為索引。

到此這篇關(guān)于Pandas數(shù)據(jù)分析之pandas數(shù)據(jù)透視表和交叉表的文章就介紹到這了,更多相關(guān)pandas數(shù)據(jù)透視表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python一行代碼實(shí)現(xiàn)打開(kāi)各種類型的文件

    Python一行代碼實(shí)現(xiàn)打開(kāi)各種類型的文件

    在處理大量文件時(shí),手動(dòng)一個(gè)個(gè)打開(kāi)是不是很麻煩,這時(shí)候,Python的os.startfile()就是你的救星啦,本文我們就來(lái)看看如何一行代碼打開(kāi)各種類型的文件吧
    2024-12-12
  • python中掃描條形碼和二維碼的實(shí)現(xiàn)代碼

    python中掃描條形碼和二維碼的實(shí)現(xiàn)代碼

    pyzbar模塊是Python一個(gè)開(kāi)源庫(kù)用于掃描和識(shí)別二維碼信息。這篇文章主要介紹了python中掃描條形碼和二維碼的示例代碼,需要的朋友可以參考下
    2021-10-10
  • Python執(zhí)行JS代碼的三種方式

    Python執(zhí)行JS代碼的三種方式

    以前的數(shù)據(jù)靠買(mǎi),現(xiàn)在的數(shù)據(jù)靠爬”,越來(lái)越多的學(xué)者通過(guò)網(wǎng)絡(luò)爬蟲(chóng)來(lái)獲取數(shù)據(jù),但是做爬蟲(chóng)的人都知道,現(xiàn)在的很多網(wǎng)站都在和我們斗智斗勇,防護(hù)普遍越來(lái)越好,破解JS加密只是第一步,之后就是如何在我們的Python代碼中直接執(zhí)行JS,下面介紹一下幾種Python中執(zhí)行JS代碼的方法
    2024-01-01
  • 對(duì)python中UDP,socket的使用詳解

    對(duì)python中UDP,socket的使用詳解

    今天小編就為大家分享一篇對(duì)python中UDP,socket的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python虛擬環(huán)境的創(chuàng)建和使用詳解

    Python虛擬環(huán)境的創(chuàng)建和使用詳解

    這篇文章主要給大家介紹了關(guān)于Python虛擬環(huán)境的創(chuàng)建和使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python之?dāng)M合的實(shí)現(xiàn)

    python之?dāng)M合的實(shí)現(xiàn)

    這篇文章主要介紹了python之?dāng)M合的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 圖解Python中深淺copy(通俗易懂)

    圖解Python中深淺copy(通俗易懂)

    這篇文章主要介紹了圖解Python中深淺copy(通俗易懂),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python獲取豆瓣電影簡(jiǎn)介代碼分享

    python獲取豆瓣電影簡(jiǎn)介代碼分享

    這篇文章主要介紹了使用python獲取豆瓣電影簡(jiǎn)介的方法,大家參考使用吧
    2014-01-01
  • 基于Python實(shí)現(xiàn)超級(jí)瑪麗游戲的示例代碼

    基于Python實(shí)現(xiàn)超級(jí)瑪麗游戲的示例代碼

    這篇文章主要介紹了利用python實(shí)現(xiàn)超級(jí)瑪麗游戲的示例代碼,幫助大家更好的理解和使用python開(kāi)發(fā)游戲,感興趣的朋友可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • 如何使用Django Admin管理后臺(tái)導(dǎo)入CSV

    如何使用Django Admin管理后臺(tái)導(dǎo)入CSV

    這篇文章主要介紹了如何使用Django Admin管理后臺(tái)導(dǎo)入CSV,幫助大家更好的理解和使用django框架,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

杭锦旗| 沁阳市| 额尔古纳市| 论坛| 瑞昌市| 应用必备| 顺昌县| 腾冲县| 临湘市| 伊金霍洛旗| 辽源市| 竹北市| 金湖县| 青阳县| 林西县| 铜陵市| 亚东县| 隆林| 营口市| 宿迁市| 唐山市| 灌云县| 禄劝| 沁源县| 衡水市| 大同市| 津南区| 来宾市| 阳东县| 蒙阴县| 郴州市| 瑞金市| 德安县| 慈利县| 延川县| 托里县| 通城县| 本溪市| 荃湾区| 安乡县| 文昌市|