一、概述
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
微信掃一掃
支付寶掃一掃