【问题标题】:Pivot a pandas dataframe with multiple columns旋转具有多列的 pandas 数据框
【发布时间】:2020-05-30 15:12:34
【问题描述】:

我有一个如下所示的示例数据框

df1 = pd.DataFrame({'Gender':['Male','Male','Male','Male','Female','Female','Female','Female','Male','Male','Male','Male','Female','Female','Female','Female'],
                'Year' :[2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009],
           'rate':[2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6,2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6],
           'Heading':['TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123',
                     'TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456'],
           'target':[31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2,31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2],
            'day_type':['wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend']})

我想转置/旋转它们以获得如下所示的输出,但对于我的代码,它会引发如下所示的错误

df1.pivot(index='Year', columns='Heading', values='rate')

在 SO post 的帮助下,我写了这篇文章,但是对于 3 列,我不知道如何使它工作?

df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack()
df1.columns = ['_'.join(i) for i in df1.columns.tolist()]

我希望我的输出如下所示,其中每一年都作为一行,而该年份的所有相应条目都作为列。

请注意我没有填写值,因为表格列结构更重要。

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    试试map,你还需要unstack两个level

    df1 = df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate').unstack([1,2])
    df1.columns=df1.columns.map('_'.join)
    df1
          TNMAB123_Female_wk  ...  TNMAB456_Male_wkend
    Year                      ...                     
    2008                 5.6  ...                  3.2
    2009                 3.5  ...                  6.7
    [2 rows x 8 columns]
    

    【讨论】:

    • 太棒了。有用。有用。但唯一的问题是我的列中很少有在我的数据中重复两次?这意味着同一列有一个额外的条目(但为空/空白值)。赞成
    • df1.pivot_table(index=['Year','Gender','day_type'],columns='Heading',values='rate',aggfunc='sum')@TheGreat
    • 我可以知道为什么我们需要aggfunc=sum吗?
    • @TheGreat pivot 是reshape,用aggfunc,它会用sum 生成重复的agg,或者你可以做df1=df1.sum(level=0,axis=1)
    • 不,现在的问题是:我有两列。 readata123_Female_wkrealdata123 _Female_wk。注意hyphen 之间的差距。前者具有正确的值,而后者(不正确的空间问题)列是空的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多