python - Pandas 按组转置数字列

标签 python pandas pivot pivot-table transpose

制作测试数据的代码

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 没问题),我可以通过堆叠所需的输出来实现

最佳答案

使用 groupbyapply

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

enter image description here

关于python - Pandas 按组转置数字列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091996/

相关文章:

python - “图像”对象没有属性 '_committed'

python - Matplotlib:在 x 轴上显示选定的日期标签

python - 使用 urlopen 下载的进度条

python - 如何使用 for 循环和日期范围替换数据帧之间的值

MySQL 查询 : How to sum 3 different values in a column, 显示结果集中每个值的总和

python - Pandas:使用 iloc 根据条件更改 df 列值

python - 将多行连接到 Pandas 中的一行

python - 从 Pandas DataFrame 列获取列表元素

sql-server - 请解释一下 PIVOT 的组成部分

sql - 容纳数据透视表中的行总和