[英]How to transpose/pivot and group columns to rows in Pandas Dataframe?
I have data that looks like this:我的数据如下所示:
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
The desired output is to add a second column for better visibility and pivot the columns所需的输出是添加第二列以获得更好的可见性并旋转列
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
Is there a way to get that type of pivot?有没有办法获得这种类型的枢轴?
Try this:尝试这个:
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
Here you go:干得好:
df = df.set_index('Date').stack().reset_index()
df.columns=['Date', 'SalesType', 'Sales']
Full test code:完整的测试代码:
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)
Input:输入:
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
Output:输出:
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
UPDATE :更新:
For fun, if your version of python supports the walrus operator (technically, the "conditional operator") :=
, you can do it in one line like this:为了好玩,如果您的 python 版本支持海象运算符(技术上,“条件运算符”) :=
,您可以像这样在一行中完成:
(df := df.set_index('Date').stack().reset_index()).columns=['Date', 'SalesType', 'Sales']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.