[英]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.