【问题标题】:pandas transpose numeric column by group熊猫按组转置数字列
【发布时间】:2016-10-17 17:06:58
【问题描述】:

生成测试数据的代码

import pandas as pd

dftest = pd.DataFrame({'Amt': {0: 60, 1: 35.0, 2: 30.0, 3: np.nan, 4: 25},
                       'Year': {0: 2012.0, 1: 2012.0, 2: 2012.0, 3: 2013.0, 4: 2013.0},
                       'Name': {0: 'A', 1: 'A', 2: 'C', 3: 'A', 4: 'B'}})

给予

    Amt     Name    Year
0   60        A   2012.0
1   35.0      A   2012.0
2   30.0      C   2012.0
3   NaN       A   2013.0
4   25        B   2013.0

Amt 最多有 2 个值对应于组 ['Name', 'Year']。我想旋转/转置以使输出具有以下形式

       Name  Year   Amt1  Amt2
0         A  2012   35    60
2         C  2012   30    NaN
3         A  2013   NaN   NaN
4         B  2013   25    NaN

我尝试过使用 pivot、unstack、pivot_table

我真正想做的是确保每个['Name', 'Year'] 有两个Amt 值(NA 可以),我可以通过堆叠所需的输出来实现

【问题讨论】:

  • 我猜你希望第一行的 Amt1 为 60,Amt2 为 35。你想让它们先排序吗?
  • 我希望它们按升序排序,这很简单,我想你现在可以忽略它

标签: python pandas pivot pivot-table transpose


【解决方案1】:

使用groupbyapply

f = lambda x: x.sort_values(ascending=True).reset_index(drop=True)
dftest.groupby(['Name', 'Year']).Amt.apply(f).unstack()

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 2018-07-19
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2022-06-22
    相关资源
    最近更新 更多