如何转置/枢轴和组列到行在熊猫数据框架?



我有这样的数据:

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版本支持walrus操作符(技术上,是"条件操作符"):=,您可以在一行中这样做:

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

最新更新