国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

瀏覽:6日期:2022-06-26 11:12:54

摘要

前面給大家分享了pandas做數(shù)據(jù)合并的兩篇[pandas.merge]和[pandas.cancat]的用法。今天這篇主要講的是pandas的DataFrame的軸旋轉(zhuǎn)操作,stack和unstack的用法。

首先,要知道以下五點(diǎn):

1.stack:將數(shù)據(jù)的列“旋轉(zhuǎn)”為行

2.unstack:將數(shù)據(jù)的行“旋轉(zhuǎn)”為列

3.stack和unstack默認(rèn)操作為最內(nèi)層

4.stack和unstack默認(rèn)旋轉(zhuǎn)軸的級(jí)別將會(huì)成果結(jié)果中的最低級(jí)別(最內(nèi)層)

5.stack和unstack為一組逆運(yùn)算操作

第一點(diǎn)和第二點(diǎn)以及第五點(diǎn)比較好懂,可能乍看第三點(diǎn)和第四點(diǎn)會(huì)不太理解,沒(méi)關(guān)系,看看具體下面的例子,你就懂了。

1、創(chuàng)建DataFrame,行索引名為state,列索引名為number

import pandas as pdimport numpy as npdata = pd.DataFrame(np.arange(6).reshape((2,3)),index=pd.Index([’Ohio’,’Colorado’],name=’state’) ,columns=pd.Index([’one’,’two’,’three’],name=’number’))data

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

2、將DataFrame的列旋轉(zhuǎn)為行,即stack操作

result = data.stack()result

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

從下圖中結(jié)果來(lái)理解上述點(diǎn)4,stack操作后將列索引number旋轉(zhuǎn)為行索引,并且置于行索引的最內(nèi)層(外層為索引state),也就是將旋轉(zhuǎn)軸(number)的結(jié)果置于 最低級(jí)別。

3、將DataFrame的行旋轉(zhuǎn)為列,即unstack操作

result.unstack()

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

從下面結(jié)果理解上述點(diǎn)3,unstack操作默認(rèn)將內(nèi)層索引number旋轉(zhuǎn)為列索引。

同時(shí),也可以指定分層級(jí)別或者索引名稱(chēng)來(lái)指定操作級(jí)別,下面做錯(cuò)同樣會(huì)得到上面的結(jié)果。

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

4、stack和unstack逆運(yùn)算

s1 = pd.Series([0,1,2,3],index=list(’abcd’))s2 = pd.Series([4,5,6],index=list(’cde’))data2 = pd.concat([s1,s2],keys=[’one’,’two’])data2

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

data2.unstack().stack()

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

補(bǔ)充:使用Pivot、Pivot_Table、Stack和Unstack等方法在Pandas中對(duì)數(shù)據(jù)變形(重塑)

Pandas是著名的Python數(shù)據(jù)分析包,這使它更容易讀取和轉(zhuǎn)換數(shù)據(jù)。在Pandas中數(shù)據(jù)變形意味著轉(zhuǎn)換表或向量(即DataFrame或Series)的結(jié)構(gòu),使其進(jìn)一步適合做其他分析。在本文中,小編將舉例說(shuō)明最常見(jiàn)的一些Pandas重塑功能。

一、Pivot

pivot函數(shù)用于從給定的表中創(chuàng)建出新的派生表,pivot有三個(gè)參數(shù):索引、列和值。具體如下:

def pivot_simple(index, columns, values): ''' Produce ’pivot’ table based on 3 columns of this DataFrame. Uses unique values from index / columns and fills with values. Parameters ---------- index : ndarray Labels to use to make new frame’s index columns : ndarray Labels to use to make new frame’s columns values : ndarray Values to use for populating new frame’s values

作為這些參數(shù)的值需要事先在原始的表中指定好對(duì)應(yīng)的列名。然后,pivot函數(shù)將創(chuàng)建一個(gè)新表,其行和列索引是相應(yīng)參數(shù)的唯一值。我們一起來(lái)看一下下面這個(gè)例子:

假設(shè)我們有以下數(shù)據(jù):

Python pandas軸旋轉(zhuǎn)stack和unstack的使用說(shuō)明

我們將數(shù)據(jù)讀取進(jìn)來(lái):

from collections import OrderedDictfrom pandas import DataFrameimport pandas as pdimport numpy as np data = OrderedDict(( ('item', [’Item1’, ’Item1’, ’Item2’, ’Item2’]), (’color’, [’red’, ’blue’, ’red’, ’black’]), (’user’, [’1’, ’2’, ’3’, ’4’]), (’bm’, [’1’, ’2’, ’3’, ’4’])))data = DataFrame(data)print(data)

得到結(jié)果為:

item color user bm0 Item1 red 1 11 Item1 blue 2 22 Item2 red 3 33 Item2 black 4 4

接下來(lái),我們對(duì)以上數(shù)據(jù)進(jìn)行變形:

df = data.pivot(index=’item’, columns=’color’, values=’user’)print(df)

得到的結(jié)果為:

color black blue reditem Item1 None 2 1Item2 4 None 3

注意:可以使用以下方法對(duì)原始數(shù)據(jù)和轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行等效查詢(xún):

# 原始數(shù)據(jù)集print(data[(data.item==’Item1’) & (data.color==’red’)].user.values) # 變換后的數(shù)據(jù)集print(df[df.index==’Item1’].red.values)

結(jié)果為:

[’1’][’1’]

在以上的示例中,轉(zhuǎn)化后的數(shù)據(jù)不包含bm的信息,它僅包含我們?cè)趐ivot方法中指定列的信息。下面我們對(duì)上面的例子進(jìn)行擴(kuò)展,使其在包含user信息的同時(shí)也包含bm信息。

df2 = data.pivot(index=’item’, columns=’color’)print(df2)

結(jié)果為:

user bm color black blue red black blue reditem Item1 None 2 1 None 2 1Item2 4 None 3 4 None 3

從結(jié)果中我們可以看出:Pandas為新表創(chuàng)建了分層列索引。我們可以用這些分層列索引來(lái)過(guò)濾出單個(gè)列的值,例如:使用df2.user可以得到user列中的值。

二、Pivot Table

有如下例子:

data = OrderedDict(( ('item', [’Item1’, ’Item1’, ’Item1’, ’Item2’]), (’color’, [’red’, ’blue’, ’red’, ’black’]), (’user’, [’1’, ’2’, ’3’, ’4’]), (’bm’, [’1’, ’2’, ’3’, ’4’])))data = DataFrame(data) df = data.pivot(index=’item’, columns=’color’, values=’user’)

得到的結(jié)果為:

ValueError: Index contains duplicate entries, cannot reshape

因此,在調(diào)用pivot函數(shù)之前,我們必須確保我們指定的列和行沒(méi)有重復(fù)的數(shù)據(jù)。如果我們無(wú)法確保這一點(diǎn),我們可以使用pivot_table這個(gè)方法。

pivot_table方法實(shí)現(xiàn)了類(lèi)似pivot方法的功能,它可以在指定的列和行有重復(fù)的情況下使用,我們可以使用均值、中值或其他的聚合函數(shù)來(lái)計(jì)算重復(fù)條目中的單個(gè)值。

首先,我們先來(lái)看一下pivot_table()這個(gè)方法:

def pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’,fill_value=None, margins=False, dropna=True,margins_name=’All’): ''' Create a spreadsheet-style pivot table as a DataFrame. The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame Parameters ---------- data : DataFrame values : column to aggregate, optional index : column, Grouper, array, or list of the previous If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table index. If an array is passed, it is being used as the same manner as column values. columns : column, Grouper, array, or list of the previous If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table column. If an array is passed, it is being used as the same manner as column values. aggfunc : function or list of functions, default numpy.mean If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names (inferred from the function objects themselves) fill_value : scalar, default None Value to replace missing values with margins : boolean, default False Add all row / columns (e.g. for subtotal / grand totals) dropna : boolean, default True Do not include columns whose entries are all NaN margins_name : string, default ’All’ Name of the row / column that will contain the totals when margins is True. 接下來(lái)我們來(lái)看一個(gè)示例:data = OrderedDict(( ('item', [’Item1’, ’Item1’, ’Item1’, ’Item2’]), (’color’, [’red’, ’blue’, ’red’, ’black’]), (’user’, [’1’, ’2’, ’3’, ’4’]), (’bm’, [’1’, ’2’, ’3’, ’4’])))data = DataFrame(data) df = data.pivot_table(index=’item’, columns=’color’, values=’user’, aggfunc=np.min)print(df)

結(jié)果為:

color black blue reditem Item1 None 2 1Item2 4 None None

實(shí)際上,pivot_table()是pivot()的泛化,它允許在數(shù)據(jù)集中聚合具有相同目標(biāo)的多個(gè)值。

三、Stack/Unstack

事實(shí)上,變換一個(gè)表只是堆疊DataFrame的一種特殊情況,假設(shè)我們有一個(gè)在行列上有多個(gè)索引的DataFrame。堆疊DataFrame意味著移動(dòng)最里面的列索引成為最里面的行索引,反向操作稱(chēng)之為取消堆疊,意味著將最里面的行索引移動(dòng)為最里面的列索引。例如:

from pandas import DataFrameimport pandas as pdimport numpy as np # 建立多個(gè)行索引row_idx_arr = list(zip([’r0’, ’r0’], [’r-00’, ’r-01’]))row_idx = pd.MultiIndex.from_tuples(row_idx_arr) # 建立多個(gè)列索引col_idx_arr = list(zip([’c0’, ’c0’, ’c1’], [’c-00’, ’c-01’, ’c-10’]))col_idx = pd.MultiIndex.from_tuples(col_idx_arr) # 創(chuàng)建DataFramed = DataFrame(np.arange(6).reshape(2,3), index=row_idx, columns=col_idx)d = d.applymap(lambda x: (x // 3, x % 3)) # Stack/Unstacks = d.stack()u = d.unstack()print(s)print(u)

得到的結(jié)果為:

c0 c1r0 r-00 c-00 (0, 0) NaN c-01 (0, 1) NaN c-10 NaN (0, 2) r-01 c-00 (1, 0) NaN c-01 (1, 1) NaN c-10 NaN (1, 2) c0 c1 c-00 c-01 c-10 r-00 r-01 r-00 r-01 r-00 r-01r0 (0, 0) (1, 0) (0, 1) (1, 1) (0, 2) (1, 2)

實(shí)際上,Pandas允許我們?cè)谒饕娜魏渭?jí)別上堆疊/取消堆疊。 因此,在前面的示例中,我們也可以堆疊在最外層的索引級(jí)別上。 但是,默認(rèn)(最典型的情況)是在最里面的索引級(jí)別進(jìn)行堆疊/取消堆疊。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久色乳综合思思在线视频 | 99国产精品视频免费观看 | xxx国产老太婆视频 xxx欧美老熟 | 欧美久色 | 久久久久欧美国产精品 | 国产精品久久久精品三级 | 一级一黄在线观看视频免费 | 成人一级毛片 | 日本特一级毛片免费视频 | 韩国黄色一级毛片 | 亚洲国产精品一区二区九九 | 亚洲精品免费在线 | 在线视频三区 | 久久99国产亚洲高清观看首页 | 午夜欧美精品久久久久久久久 | 免费三级网址 | 国内精品久久久久不卡 | 99久久精品费精品国产一区二区 | 二级黄的全免费视频 | 欧美成年人网站 | 日本三级一区 | 日本a级毛片免费视频播放 日本a级三级三级三级久久 | 久青草视频在线 | 国产盗摄一区二区三区 | 玖玖在线免费视频 | 亚洲在线欧美 | 亚洲一区免费在线观看 | 欧美一区三区 | 亚洲最大网址 | 国产黄色小视频在线观看 | 国产成人永久免费视频 | 狠色狠狠色狠狠狠色综合久久 | 免费中文字幕在线 | 看毛片的网址 | 午夜性福利| 欧美日本在线一区二区三区 | 欧美成人在线视频 | 久久三级毛片 | 99热久久国产综合精品久久国产 | 亚洲久草视频 | 日本精品一区二区三区在线视频 |