一、概述
pandas是一款用於數據分析的開源工具包,unstack()函數是pandas中map-reduce(map操作和reduce操作)的一個重要數據重構工具。unstack()函數的作用就是將一個層次化索引的DataFrame轉化為一個普通的二維DataFrame,同時用unstack()函數可以方便的進行數據透視表的運算。unstack()函數可以用於處理缺失值、處理時序數據以及解決索引和欄位之間的轉化問題。
二、unstack()函數基本語法
pandas.unstack(level=-1, fill_value=None)
import pandas as pd import numpy as np df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3, 'B': ['A', 'B', 'C'] * 4, 'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 'D': np.random.randn(12), 'E': np.random.randn(12)}) print(df) print(df.unstack()) # 列轉行 print(df.set_index(['A', 'B'])) # 設置索引 print(df.set_index(['A', 'B']).unstack(level=(0, 1))) # 多索引列轉行
三、使用示例
1、列轉行
使用unstack()函數可以將DataFrame的列轉化為行。
import pandas as pd data = { "type": ["A", "A", "B", "B"], "value": [10, 20, 30, 40], "name": ["Tom", "Tom", "Bob", "Bob"] } df = pd.DataFrame(data, columns=["type", "value", "name"]) print(df) print(df.set_index(['type', 'name'])['value'].unstack()) # 列轉行
2、填充缺失值
使用unstack()函數可以方便的對缺失值進行填充,同時保留原有的索引。
import pandas as pd import numpy as np data = { "type": ["A", "A", "A", "B", "B", "B"], "time": ["2020-01", "2020-02", "2020-03", "2020-01", "2020-02", "2020-03"], "value": [10, np.nan, 30, 40, 50, np.nan] } df = pd.DataFrame(data, columns=["type", "time", "value"]) print(df) df = df.set_index(["type", "time"]).unstack() print(df) df = df.fillna(method="ffill", axis=1) print(df.stack().swaplevel()) # 填充缺失值
3、多層索引列轉行
使用unstack()函數可以方便的將多層索引的DataFrame進行列轉行,同時可以指定需要轉化的層。
import pandas as pd import numpy as np data = { "type": ["A", "A", "A", "B", "B", "B"], "time": ["2020-01", "2020-02", "2020-03", "2020-01", "2020-02", "2020-03"], "value1": [10, 20, 30, 40, 50, 60], "value2": [20, 30, 40, 50, 60, 70] } df = pd.DataFrame(data, columns=["type", "time", "value1", "value2"]) print(df.set_index(["type", "time"])) print(df.set_index(["type", "time"]).unstack(level=(0, 1))) # 多索引列轉行
四、小結
pandas.unstack()是一個重要的數據重構工具,可以用於數據透視表的運算,可以方便的處理缺失值、處理時序數據以及解決索引和欄位之間的轉化問題。在實際的應用中,unstack()函數非常實用,非常方便,能夠將DataFrame轉化為二維的表格,便於後續的數據分析和運算。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244282.html