旋转更宽 Pandas DataFrame

Pivot Wider Pandas DataFrame

您好,我正试图在 Python 中将我的数据从长轴转向宽轴。我对这里的其他一些答案感到困惑,混合使用 pivot 或 set_index 和 unstack,以及分层索引等的人

下面是一个 4 列 9 行的示例 df。我希望能够旋转数据,以便每个唯一 id 恰好有 1 行,其中包括像 Jan 2021 salesJan 2021 profit 这样的列。所以每个月的销售额和利润都会有自己的列。

import pandas as pd
from datetime import datetime, timedelta

sample_df = pd.DataFrame({
 'id': [1, 1, 1, 2, 2, 2, 3, 3, 3],
 'month': ['Jan 2021', 'Feb 2021', 'Mar 2021', 'Jan 2021', 'Feb 2021', 'Mar 2021', 'Jan 2021', 'Feb 2021', 'Mar 2021'],
 'sales': [100, 200, 300, 400, 500, 600, 700, 800, 900],
 'profit': [10, 20, 30, 40, 50, 60, 70, 80, 90]}
)

sample_df_pivot = xxx

理想情况下它应该是这样的

如有任何帮助,我们将不胜感激!

这是您要找的吗?

sample_df.pivot(index='id', columns ='month')

         sales                     profit                  
month Feb 2021 Jan 2021 Mar 2021 Feb 2021 Jan 2021 Mar 2021
id                                                         
1          200      100      300       20       10       30
2          500      400      600       50       40       60
3          800      700      900       80       70       90

试试这个:

df = sample_df.pivot(columns='month', index='id')
df.columns = df.columns.swaplevel().map(' '.join)

输出:

>>> df
    Feb 2021 sales  Jan 2021 sales  Mar 2021 sales  Feb 2021 profit  Jan 2021 profit  Mar 2021 profit
id                                                                                                   
1              200             100             300               20               10               30
2              500             400             600               50               40               60
3              800             700             900               80               70               90