【问题标题】:Pandas - transpose one column熊猫 - 转置一列
【发布时间】:2018-09-27 17:07:04
【问题描述】:

我在使用 pandas 转置时遇到困难。

我有以下df:

date         name    quantity
1/1/2018     A       5
1/1/2018     B       6
1/1/2018     C       7
1/2/2018     A       9
1/2/2018     B       8
1/2/2018     C       6

我最终想为每个日期的所有名称及其数量创建成对相关性。为此,我首先尝试从此 df 创建以下输出:

 date       A    B    C
 1/1/2018   5    6    7
 1/2/2018   9    8    6

转置对我来说很困难,因为我可以获得重复的列标题,但我也不想通过先删除它们而丢失任何数据。我有一种感觉,答案可能是我并没有真正使用的 panda 实用程序,而且我可能正在转置隧道......

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

由于您没有执行聚合,pd.DataFrame.pivot 应该优先于 groupby / pivot_table

res = df.pivot(index='date', columns='name', values='quantity')

print(res)

name      A  B  C
date             
1/1/2018  5  6  7
1/2/2018  9  8  6

如果您愿意,可以使用reset_indexdate 提升为一列。

【讨论】:

    【解决方案2】:

    我提出的解决方案绝不比 jpp 更好。我只是碰巧遇到了同样的问题并以不同的方式解决了它。

    df.set_index(['date', 'name']).unstack()
    

    结果看起来也有点混乱,但它在我的情况下有效:

    【讨论】:

      【解决方案3】:

      这是一个groupby 解决方案,尽管与pivot 方法相比它非常不切实际。我只建议将此作为熟悉熊猫索引的练习。

      # Get values of 'quantity' for each date
      x = df.groupby('date')['quantity'].agg(list)
      # Insert these values into a new data frame
      df2 = pd.DataFrame(index=x.index, data=x.to_list(), columns=df['name'].unique())
      

      这会返回:

                  A   B   C
      date            
      1/1/2018    5   6   7
      1/2/2018    8   9   6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-14
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 2019-12-27
        • 1970-01-01
        • 2019-10-12
        相关资源
        最近更新 更多