一文搞懂Pandas數(shù)據(jù)透視的4個函數(shù)的使用
大家好,我是丁小杰!
今天和大家分享Pandas
中四種有關(guān)數(shù)據(jù)透視的通用函數(shù),在數(shù)據(jù)處理中遇到這類需求時,能夠很好地應(yīng)對。
pandas.melt()
melt
函數(shù)的主要作用是將DataFrame
從寬格式轉(zhuǎn)換成長格式。
“pandas.melt(frame,id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)
”
參數(shù)含義
id_vars
:tuple, list, or ndarray,可選,作為標識符變量的列value_vars
:tuple, list, or ndarray, 可選,透視列,如果未指定,則使用未設(shè)置為id_vars的所有列。var_name
:scalar,默認為None,使用variable作為列名value_name
:標量, default ‘value’,value列的名稱col_level
:int or str, 可選,如果列是多層索引,melt將應(yīng)用于指定級別ignore_index
:bool, 默認為True,相當于從0開始重新排序。如果為False,則保留原來的索引,索引標簽將出現(xiàn)重復(fù)。
看個例子先:
import?pandas?as?pd df?=?pd.DataFrame( ????{'地區(qū)':?['A',?'B',?'C'], ?????'2020':?[80,?60,?40], ?????'2021':?[800,?600,?400],? ?????'2022':?[8000,?6000,?4000]})
pd.melt(df, ????????id_vars=['地區(qū)'], ????????value_vars=['2020',?'2021',?'2022'])
設(shè)置var_name
與value_name
。
df?=?pd.melt(df, ?????????????id_vars=['地區(qū)'], ?????????????value_vars=['2020',?'2021',?'2022'], ?????????????var_name='年份', ?????????????value_name='銷售額')
pandas.pivot()
pivot
函數(shù)主要用于通過索引及列值對DataFrame
重構(gòu)。
“pandas.pivot(data, index=None, columns=None, values=None)
”
參數(shù)含義
data
:DataFrame對象index
:可選,用于新DataFrame的索引columns
:用于創(chuàng)建新DataFrame的列values
:可選,用于填充新DataFrame的值
用上面的結(jié)果舉個例子:
df.pivot(index='年份', ?????????columns='地區(qū)', ?????????values='銷售額')
也可以寫成以下格式。
df.pivot(index='年份',?columns='地區(qū)')['銷售額']
添加一個銷量列,同時統(tǒng)計兩個values
,這樣會使columns
變成多層索引。
df['銷量']?=?df['銷售額']/10 df.pivot(index='年份', ?????????columns='地區(qū)', ?????????values=['銷售額',?'銷量'])
添加一個月份列,指定兩個index
。
df['月份']?=?[f'{m}月'?for?m?in?range(1,?4)]*3 df.pivot(index=['年份',?'月份'], ?????????columns='地區(qū)', ?????????values='銷售額')
使用pivot
時需要注意,當index
,columns
出現(xiàn)重復(fù)時,會導(dǎo)致ValueError
。
df?=?pd.DataFrame( ????????{'地區(qū)':?['A',?'A',?'B',?'C'], ?????????'年份':?['2020',?'2020',?'2021',?'2022'], ?????????'銷售額':?[800,?600,?400,?200]})
df.pivot(index='地區(qū)', ?????????columns='年份', ?????????values='銷售額') #?ValueError
pandas.pivot_table()
這個函數(shù)之前已經(jīng)單獨講過了,詳見Pandas玩轉(zhuǎn)數(shù)據(jù)透視表,相比于pivot
,pivot_table
的靈活性更強。
pandas.crosstab()
crosstab
函數(shù)計算兩個(或多個)數(shù)組的簡單交叉表。默認情況下計算元素的頻率表。
“pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)
”
看下例子:
這里默認計算頻率。
import?numpy?as?np array_A?=?np.array(["one",?"two",?"two",?"three",?"three",?"three"],?dtype=object) array_B?=?np.array(["Python",?"Python",?"Python",?"C",?"C",?"C"],?dtype=object) array_C?=?np.array(["Y",?"Y",?"Y",?"N",?"N",?"N"]) pd.crosstab(array_A, ???????????[array_B,?array_C], ???????????rownames=['array_A'], ???????????colnames=['array_B',?'array_C'])
新建一個values
列,計算總和。
array_D?=?np.array([1,?4,?9,?16,?25,?36]) pd.crosstab(index=array_A, ????????????columns=[array_B,?array_C], ????????????rownames=['array_A'], ????????????colnames=['array_B',?'array_C'], ????????????values=array_D, ????????????aggfunc='sum')
到此這篇關(guān)于一文搞懂Pandas數(shù)據(jù)透視的4個函數(shù)的使用的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)透視內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解python requests中的post請求的參數(shù)問題
這篇文章主要介紹了詳解python requests中的post請求的參數(shù)問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python使用技巧之實現(xiàn)Excel轉(zhuǎn)為PDF
這篇文章主要為大家詳細介紹了使用第三方Python庫Spire.XLS?for?Python?實現(xiàn)Excel轉(zhuǎn)PDF的簡單方法,文中的示例代碼講解詳細,需要的可以參考下2023-11-11