在 Pandas 中使用 stack() 和 unstack() 函式重塑 DataFrame

Preet Sanghavi 2023年1月30日
  1. Pandas 中的 stack()unstack() 函式
  2. 使用 unstack() 函式來改變我們的 DataFrame
  3. 使用 unstack() 函式來改變我們的 DataFrame
在 Pandas 中使用 stack() 和 unstack() 函式重塑 DataFrame

Pandas 是 Python 中的高階資料分析工具或包擴充套件。當我們在 SQL 表、電子表格或異構列中有資料時,強烈建議使用 Pandas。

本文探討了 Pandas 中堆疊和取消堆疊的基本概念。在 Pandas 中,stacking 和 unstacking 被廣泛用於改變正在考慮的 DataFrame 的形狀。

讓我們看看這個方法的實際效果。首先,我們將建立一個虛擬 DataFrame dates_data 以及幾行。

import pandas as pd

index = pd.date_range("2013-1-1", periods=100, freq="30Min")
dates_data = pd.DataFrame(data=list(range(100)), columns=["value"], index=index)
dates_data["value2"] = "Alpha"
dates_data["value2"].loc[0:10] = "Beta"

上面的程式碼塊建立了一個 DataFramedates_data,其中包含日期和名為 valuevalue2 的兩列。檢視資料中的條目,我們使用以下程式碼:

print(dates_data)

輸出:

                     value value2
2013-01-01 00:00:00      0   Beta
2013-01-01 00:30:00      1   Beta
2013-01-01 01:00:00      2   Beta
2013-01-01 01:30:00      3   Beta
2013-01-01 02:00:00      4   Beta
...                    ...    ...
2013-01-02 23:30:00     95  Alpha
2013-01-03 00:00:00     96  Alpha
2013-01-03 00:30:00     97  Alpha
2013-01-03 01:00:00     98  Alpha
2013-01-03 01:30:00     99  Alpha

正如我們所看到的,我們有 100 個不同的條目,每個條目在 30 分鐘的間隔後設定的時間相同。

此外,還建立了兩個名為 valuevalue2 的附加列,其中我們將一些值設定為數字,而將其他值設定為 AlphaBeta

Pandas 中的 stack()unstack() 函式

我們可以藉助 Pandas 中名為 stack()unstack() 的兩個函式來更改名為 dates_data 的 DataFrame。這個函式可以幫助我們改變 DataFrame 的方向,使行變成列,列相應地變成行。

我們將嘗試將 DataFrame 中的 valuevalue2 更改為行,並將其中的值更改為行中的條目。

使用 unstack() 函式來改變我們的 DataFrame

命令:

dates_data = dates_data.unstack()
print(dates_data)

輸出:

value   2013-01-01 00:00:00        0
        2013-01-01 00:30:00        1
        2013-01-01 01:00:00        2
        2013-01-01 01:30:00        3
        2013-01-01 02:00:00        4
                               ...
value2  2013-01-02 23:30:00    Alpha
        2013-01-03 00:00:00    Alpha
        2013-01-03 00:30:00    Alpha
        2013-01-03 01:00:00    Alpha
        2013-01-03 01:30:00    Alpha
Length: 200, dtype: object

現在,我們已經成功地改變了我們的資料,現在我們將列作為資料中的行條目。

使用 unstack() 函式來改變我們的 DataFrame

命令:

dates_data = dates_data.stack()
print(dates_data)

輸出:

2013-01-01 00:00:00  value         0
                     value2     Beta
2013-01-01 00:30:00  value         1
                     value2     Beta
2013-01-01 01:00:00  value         2
                               ...
2013-01-03 00:30:00  value2    Alpha
2013-01-03 01:00:00  value        98
                     value2    Alpha
2013-01-03 01:30:00  value        99
                     value2    Alpha
Length: 200, dtype: object

列值現在在我們的 DataFrame 中堆疊為行。

因此,藉助 Pandas 中的 unstacking 技術,我們可以根據需要在需要時有效地過濾資料,並轉換 DataFrame 的外觀,以便以更好的方式視覺化資料。

作者: Preet Sanghavi
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub