【问题标题】:How to pivot dataframe without changing index and returning all columns from previous operation如何在不更改索引并返回先前操作的所有列的情况下旋转数据框
【发布时间】:2020-05-09 05:26:06
【问题描述】:

我有一张桌子:

当我尝试在 python 中旋转时:

df.pivot(columns = 'Type', values = 'Value')

它只返回类型列中带有值的列,但列 Col1-Col5 没有出现在我的数据框中

在 Power Query 中实现起来非常简单,我只需选择要旋转的列和该列的值:

在此操作之后,我得到以下结果:

如何使用 pd.pivot 获得相同的结果?

谢谢!

【问题讨论】:

  • 分享实际数据,而不是图片
  • 其实是一样的,只是在Type和Month列之前多了15列,主要是一些ID、Names等

标签: python pandas dataframe pivot


【解决方案1】:

绝不使用pd.pivot。有针对这种情况的pd.pivot_table 函数:

table = pd.pivot_table(df, values='Value', index=['Col1','Col2','Col3','Col4','Col5'], 
columns=['Type'], aggfunc=np.sum)

【讨论】:

    【解决方案2】:

    您应该能够使用pivot_table() 来执行此操作,步骤与in this answer 概述的步骤相同

    res = df.pivot_table(values='Value', index=['Col1','Col2','Col3','Col4','Col5'], columns='Type')
    

    这会创建一个多索引数据框,然后您可以将其展平:

    res.reset_index(inplace=True)
    res.columns.name = None
    

    【讨论】:

    • 得到 'DataError: No numeric types to aggregate' 尽管 'Values' 列中有浮点数:(
    • 您可以发布数据集的子集吗?理想情况下,易于直接复制,这些指南是一个很好的参考点:stackoverflow.com/help/minimal-reproducible-example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2020-08-05
    • 2019-11-22
    • 2012-10-28
    • 2021-02-16
    相关资源
    最近更新 更多