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


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

Pandas DataFrame.melt(~)方法將源 DataFrame 的格式從"wide""long".

讓我們看一個簡單的例子。考慮以下 DataFrame :

名字

年齡

高度

alex

40

150

bob

50

160

這被認為是一個"wide"DataFrame 因為每一行都捕獲有關該人的所有相關數據。現在,將其轉換為"long" DataFrame :

名字

變量

alex

age

30

alex

height

150

bob

age

50

bob

height

160

現在,每一行捕獲有關該人的單個變量,這不可避免地會導致垂直"long" DataFrame 。

Pandas 使用這個術語"unpivot"表示基於變量延長 DataFrame 的操作。在這個例子中,我們是不旋轉變量ageheight.

參數

1.id_vars | tuplelistNumpy array | optional

用作標識符的列的標簽。

2. value_vars | tuplelistNumpy array | optional

要取消透視的列的標簽。默認情況下,所有列都將取消透視。

3. var_name | scalar | optional

變量列的標簽。默認情況下,var_name="variable"

4. value_name | scalar | optional

值列的標簽。默認情況下,value_name="value"

5. col_level | intstring | optional

執行該方法的級別。這僅與多索引列相關。

返回值

已取消透視的DataFrame。

例子

考慮以下 DataFrame :

df = pd.DataFrame({"name":["alex","bob","cathy"], "age":[40,50,60], "height":[150,160,170]})
df



   name   age  height
0  alex   40   150
1  bob    50   160
2  cathy  60   170

基本用法

這裏,標識符列是 name ,要取消透視的列是 ageheight

df.melt(id_vars="name", value_vars=["age","height"])



   name   variable  value
0  alex   age       40
1  bob    age       50
2  cathy  age       60
3  alex   height    150
4  bob    height    160
5  cathy  height    170

在這裏,我們實際上可以省略 value_vars 參數,因為默認情況下,除了標識符列 ( name ) 之外的所有列都將被取消透視。

指定value_vars

假設我們隻想取消透視一列而不是兩列。我們可以使用 value_vars 參數簡單地指定要取消透視的列:

df.melt(id_vars="name", value_vars="age")



   name   variable  value
0  alex   age       40
1  bob    age       50
2  cathy  age       60

請注意 height 列是如何被剝離的。如果我們想保留高度列,我們必須將其包含在 id_vars 參數中,如下所示:

df.melt(id_vars=["name","height"], value_vars="age")



   name   height  variable  value
0  alex   150     age       40
1  bob    160     age       50
2  cathy  170     age       60

指定var_name和value_name

在這裏,我們再次展示df供您參考:

df



   name   age  height
0  alex   40   150
1  bob    50   160
2  cathy  60   170

正如我們在上麵的示例中看到的,新的列標簽默認為 "variable""value" ,我們可以通過指定 var_namevalue_name 來更改它,如下所示:

df.melt(id_vars="name", var_name="attribute", value_name="number")



   name   attribute  number
0  alex   age        40
1  bob    age        50
2  cathy  age        60
3  alex   height     150
4  bob    height     160
5  cathy  height     170

相關用法


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