日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python pandas軸旋轉stack和unstack的使用說明

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

摘要

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

首先,要知道以下五點:

1.stack:將數據的列“旋轉”為行

2.unstack:將數據的行“旋轉”為列

3.stack和unstack默認操作為最內層

4.stack和unstack默認旋轉軸的級別將會成果結果中的最低級別(最內層)

5.stack和unstack為一組逆運算操作

第一點和第二點以及第五點比較好懂,可能乍看第三點和第四點會不太理解,沒關系,看看具體下面的例子,你就懂了。

1、創建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軸旋轉stack和unstack的使用說明

2、將DataFrame的列旋轉為行,即stack操作

result = data.stack()result

Python pandas軸旋轉stack和unstack的使用說明

從下圖中結果來理解上述點4,stack操作后將列索引number旋轉為行索引,并且置于行索引的最內層(外層為索引state),也就是將旋轉軸(number)的結果置于 最低級別。

3、將DataFrame的行旋轉為列,即unstack操作

result.unstack()

Python pandas軸旋轉stack和unstack的使用說明

從下面結果理解上述點3,unstack操作默認將內層索引number旋轉為列索引。

同時,也可以指定分層級別或者索引名稱來指定操作級別,下面做錯同樣會得到上面的結果。

Python pandas軸旋轉stack和unstack的使用說明

4、stack和unstack逆運算

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軸旋轉stack和unstack的使用說明

data2.unstack().stack()

Python pandas軸旋轉stack和unstack的使用說明

補充:使用Pivot、Pivot_Table、Stack和Unstack等方法在Pandas中對數據變形(重塑)

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

一、Pivot

pivot函數用于從給定的表中創建出新的派生表,pivot有三個參數:索引、列和值。具體如下:

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

作為這些參數的值需要事先在原始的表中指定好對應的列名。然后,pivot函數將創建一個新表,其行和列索引是相應參數的唯一值。我們一起來看一下下面這個例子:

假設我們有以下數據:

Python pandas軸旋轉stack和unstack的使用說明

我們將數據讀取進來:

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)

得到結果為:

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

接下來,我們對以上數據進行變形:

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

得到的結果為:

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

注意:可以使用以下方法對原始數據和轉換后的數據進行等效查詢:

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

結果為:

[’1’][’1’]

在以上的示例中,轉化后的數據不包含bm的信息,它僅包含我們在pivot方法中指定列的信息。下面我們對上面的例子進行擴展,使其在包含user信息的同時也包含bm信息。

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

結果為:

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

從結果中我們可以看出:Pandas為新表創建了分層列索引。我們可以用這些分層列索引來過濾出單個列的值,例如:使用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’)

得到的結果為:

ValueError: Index contains duplicate entries, cannot reshape

因此,在調用pivot函數之前,我們必須確保我們指定的列和行沒有重復的數據。如果我們無法確保這一點,我們可以使用pivot_table這個方法。

pivot_table方法實現了類似pivot方法的功能,它可以在指定的列和行有重復的情況下使用,我們可以使用均值、中值或其他的聚合函數來計算重復條目中的單個值。

首先,我們先來看一下pivot_table()這個方法:

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. 接下來我們來看一個示例: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)

結果為:

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

實際上,pivot_table()是pivot()的泛化,它允許在數據集中聚合具有相同目標的多個值。

三、Stack/Unstack

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

from pandas import DataFrameimport pandas as pdimport numpy as np # 建立多個行索引row_idx_arr = list(zip([’r0’, ’r0’], [’r-00’, ’r-01’]))row_idx = pd.MultiIndex.from_tuples(row_idx_arr) # 建立多個列索引col_idx_arr = list(zip([’c0’, ’c0’, ’c1’], [’c-00’, ’c-01’, ’c-10’]))col_idx = pd.MultiIndex.from_tuples(col_idx_arr) # 創建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)

得到的結果為:

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)

實際上,Pandas允許我們在索引的任何級別上堆疊/取消堆疊。 因此,在前面的示例中,我們也可以堆疊在最外層的索引級別上。 但是,默認(最典型的情況)是在最里面的索引級別進行堆疊/取消堆疊。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩电影在线视频| 日韩精品免费观看视频| 欧美黑人做爰爽爽爽| 日韩av成人高清| 日韩中出av| 三级亚洲高清视频| 免费观看日韩电影| 亚洲资源网站| 欧美一区二区三区久久精品| 日韩免费精品| 久久精品 人人爱| 国产精品久久国产愉拍| 欧美1区2区3| 日产精品一区二区| 久久精品国产99久久| 欧美日韩日本国产亚洲在线 | 三上亚洲一区二区| 国产在线观看www| 亚洲午夜av| 亚洲婷婷丁香| 国产美女亚洲精品7777| 久久97视频| 成人av三级| 午夜影院欧美| 日本欧美大码aⅴ在线播放| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久激情综合网| 国产精品极品国产中出| 精品香蕉视频| 久久天堂成人| 亚洲精品激情| 精品国产黄a∨片高清在线| 色综合www| 欧美专区18| 国产精品任我爽爆在线播放| 99精品视频在线| 国产精品对白| 丝袜国产日韩另类美女| 水蜜桃精品av一区二区| 美女精品在线| 九色porny丨国产首页在线| 日本麻豆一区二区三区视频| 婷婷精品进入| 久久精品色播| 日本一区免费网站| 亚洲爱爱视频| 另类欧美日韩国产在线| 丝袜a∨在线一区二区三区不卡| 日韩av有码| 国产精品久久| 日韩精品久久久久久久软件91| 亚洲高清激情| bbw在线视频| 国产精品igao视频网网址不卡日韩 | 亚洲精品精选| 欧美日一区二区| 国产成人精品一区二区免费看京| 日韩视频1区| 国产精品试看| 999久久久免费精品国产| 精品美女视频 | 精品网站aaa| 日本aⅴ精品一区二区三区| 亚洲激情中文在线| 天堂√8在线中文| 久久久久97| 国产精品亚洲片在线播放| 亚洲专区视频| 日韩中文字幕麻豆| 黄色国产精品| 国精品一区二区| 免费看av不卡| 精品三级国产| 国产精品一区二区av交换 | 91精品美女| 亚洲精品美女91| 久久都是精品| 国产农村妇女精品一区二区| 婷婷综合激情| 亚洲午夜黄色| 国产在线成人| 欧美日韩在线二区| 天堂资源在线亚洲| 久久中文字幕二区| 成人精品天堂一区二区三区| 正在播放日韩精品| 欧洲一区二区三区精品| 四虎成人av| 97精品国产一区二区三区 | 亚洲3区在线| 亚洲精品综合| 亚洲免费资源| 青草久久视频| 国产探花在线精品| 国产精品久久久免费| 国产乱码精品一区二区三区亚洲人 | 精品免费av在线| 色婷婷精品视频| 亚洲网站视频| 国产精品人人爽人人做我的可爱| 欧美中文日韩| 亚洲精品高潮| 国产亚洲精品美女久久| 久久国产精品色av免费看| 国产精品视频一区二区三区四蜜臂 | 国产欧美日韩在线一区二区| 婷婷精品在线观看| 青青草伊人久久| 国产精品欧美三级在线观看| 国产日韩欧美高清免费| 国产精品一区高清| 国产精品99一区二区三| 精精国产xxxx视频在线野外| 欧美日韩国产传媒| 免费不卡在线观看| 欧美亚洲tv| 麻豆精品国产91久久久久久| 国产高清不卡| 亚洲精品中文字幕乱码| 老色鬼久久亚洲一区二区| 蜜桃视频第一区免费观看| 亚洲开心激情| 国产精品99精品一区二区三区∴| 久久久精品国产**网站| 夜鲁夜鲁夜鲁视频在线播放| 91国语精品自产拍| 亚洲精品高潮| 精品视频免费| 亚洲风情在线资源| 免费日韩av片| 国产精品入口久久| 日韩和的一区二在线| 日韩中文字幕1| 国产精品亚洲人成在99www| 日韩国产一区| 亚洲少妇在线| 欧美日韩中出| 日韩精品永久网址| 热久久久久久久| 美女视频黄 久久| 欧美 日韩 国产一区二区在线视频| 一区二区亚洲视频| 国产劲爆久久| 免费不卡中文字幕在线| 日韩激情啪啪| 日韩亚洲一区在线| 天堂av一区| 黄毛片在线观看| 蜜桃久久久久久| 麻豆精品一区二区综合av| 欧美日韩高清| 国产视频网站一区二区三区| 日韩视频网站在线观看| 亚洲美女91| 午夜精品久久久久久久久久蜜桃| 免费看日韩精品| 超碰在线99| 免费不卡在线观看| 久久久男人天堂| 一区二区三区四区日韩| 国产aⅴ精品一区二区三区久久 | 日本不卡一区二区| 国产高清不卡| 日本va欧美va精品| 日韩亚洲一区在线| 欧美亚洲国产日韩| 香蕉精品视频在线观看| 久久精品一区| 欧美中文字幕| 日韩久久电影| 国产毛片精品| 日韩中文字幕不卡| 啪啪国产精品| 国产亚洲欧美日韩在线观看一区二区| 欧美中文一区二区| 久久99蜜桃| 欧美日韩国产高清| 国际精品欧美精品| 日韩精品免费视频一区二区三区| 88xx成人免费观看视频库| 国产亚洲精品美女久久| 亚洲综合国产| 丝袜av一区| 国产不卡精品| 亚洲精品1区2区| 亚洲欧美日韩精品一区二区 | 欧美a级片一区| 久久精品97| 午夜日韩在线| 久久精品国产亚洲aⅴ| 免播放器亚洲| 色一区二区三区四区| 在线综合亚洲| 韩国久久久久久| 亚洲毛片一区| 精品在线91| 色婷婷色综合| 青青国产精品| 欧美日韩国产亚洲一区| 精品国产亚洲一区二区三区大结局|