簡體   English   中英

如何在 Pandas Dataframe 中將列轉置/旋轉並將列分組到行?

[英]How to transpose/pivot and group columns to rows in Pandas Dataframe?

我的數據如下所示:

Date Sales1 Sales2 Sales3

date1 1.1  1.2  1.3
date2 2.1  2.2  2.3
date3 3.1  3.2  3.3

所需的輸出是添加第二列以獲得更好的可見性並旋轉列

Date SalesType Sales

date1 Sales1 1.1
date1 Sales2 1.2
date1 Sales3 1.3
date2 Sales1 2.1
date2 Sales2 2.2
date2 Sales3 2.3
date3 Sales1 3.1
date3 Sales2 3.2
date3 Sales3 3.3

有沒有辦法獲得這種類型的樞軸?

嘗試這個:

res = (df.melt(id_vars='Date', var_name='Sales_Type',value_name='Sales')
       .sort_values('Date')
       .reset_index(drop=True))

print(res)

    Date Sales_Type  Sales
0  date1     Sales1    1.1
1  date1     Sales2    1.2
2  date1     Sales3    1.3
3  date2     Sales1    2.1
4  date2     Sales2    2.2
5  date2     Sales3    2.3
6  date3     Sales1    3.1
7  date3     Sales2    3.2
8  date3     Sales3    3.3

干得好:

df = df.set_index('Date').stack().reset_index()
df.columns=['Date', 'SalesType', 'Sales']

完整的測試代碼:

import pandas as pd
df = pd.DataFrame({'Date':['date1','date2','date3'], 'Sales1':[1.1,2.1,3.1], 'Sales2':[1.2,2.2,3.2], 'Sales3':[1.3,2.3,3.3]})
print(df)
df = df.set_index('Date').stack().reset_index()
df.columns=['Date', 'SalesType', 'Sales']
print(df)

輸入:

    Date  Sales1  Sales2  Sales3
0  date1     1.1     1.2     1.3
1  date2     2.1     2.2     2.3
2  date3     3.1     3.2     3.3

輸出:

    Date SalesType  Sales
0  date1    Sales1    1.1
1  date1    Sales2    1.2
2  date1    Sales3    1.3
3  date2    Sales1    2.1
4  date2    Sales2    2.2
5  date2    Sales3    2.3
6  date3    Sales1    3.1
7  date3    Sales2    3.2
8  date3    Sales3    3.3

更新

為了好玩,如果您的 python 版本支持海象運算符(技術上,“條件運算符”) := ,您可以像這樣在一行中完成:

(df := df.set_index('Date').stack().reset_index()).columns=['Date', 'SalesType', 'Sales']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM