當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame unstack方法用法及代碼示例


Pandas DataFrame.unstack(~) 方法將指定的行級別轉換為列級別。這是 stack(~) 的相反。

參數

1.level | intstringlist 等 | optional

要轉換為列級別的行級別的整數索引或名稱。默認為 level=-1 ,表示轉換最內層的行級別。

2. fill_value | intstringdict | optional

在生成的係列/數據幀中填充 NaN 的值。請注意,原始 DataFrame 中的 NaN 將不會被填充 - 隻有那些因該方法而出現的才會被填充。默認情況下,NaN 保持原樣。

返回值

SeriesDataFrame

例子

拆垛single-level DataFrames

考慮以下single-level DataFrame:

df = pd.DataFrame({"age":[2,3],"height":[4,5]}, index=["alice","bob"])
df



       age  height
alice   2     4
bob     3     5

df 上調用 unstack() 給出:

df.unstack()



age     alice    2
        bob      3
height  alice    4
        bob      5
dtype: int64

在此,請注意以下事項:

  • 返回類型為 Series ,有兩個級別。

  • df 中的行標簽和列標簽已合並形成多索引。

將 DataFrames 與 multi-level 行拆垛

考慮以下帶有multi-level行的DataFrame:

index = [("A","alice"), ("A","bob"),("B","cathy"),("B","david")]
multi_index = pd.MultiIndex.from_tuples(index)
df = pd.DataFrame({"age":[2,3,4,5],"height":[6,7,8,9]}, index=multi_index)
df



           age   height
A   alice   2      6
    bob     3      7
B   cathy   4      8
    david   5      9

默認情況下, level=-1 ,這意味著最裏麵的行級別 ( [alice,bob,cathy,david] ) 將轉換為列級別:

df.unstack()



   age                      height
   alice  bob  cathy david  alice  bob  cathy  david
A  2.0    3.0  NaN   NaN    6.0    7.0  NaN    NaN
B  NaN    NaN  4.0   5.0    NaN    NaN  8.0    9.0

請注意以下事項:

  • 最裏麵的行級別([alice, bob, cathy, david])變成了列級別,並且定位為最裏麵的級別。

  • 使用 multi-levels 堆疊列通常會產生許多 NaN,因為例如,不存在有關組 B 中的 aliceage 的數據。

要指定要轉換的級別,請傳遞 level 參數,如下所示:

df.unstack(level=0)



        age         height
        A     B     A     B
alice   2.0   NaN   6.0   NaN
bob     3.0   NaN   7.0   NaN
cathy   NaN   4.0   NaN   8.0
david   NaN   5.0   NaN   9.0

這裏,level=0表示最外層行級別([A,B])被轉換為列級別。

指定fill_value

默認情況下, fill_value=None ,這意味著生成的 Series/DataFrame 中的 NaN 保持原樣。

要使用值填充所有 NaN,請傳入 fill_value,如下所示:

df.unstack(level=0, fill_value="@")



        age      height
        A   B    A   B
alice   2   @    6   @
bob     3   @    7   @
cathy   @   4    @   8
david   @   5    @   9

請注意,原始 DataFrame 中預先存在的 NaN 將不會被填充 - 隻有由該出棧過程引起的那些才會被 fill_value 填充。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | unstack method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。