如何在pd.pivot_table()中复制explode个索引行?

import pandas as pd

df = pd.DataFrame({
    "group": [1,2,2,3,1,2,3], 
    "panel": [1,1,1,1,2,2,2],
    "value": [0,1,2,3,4,5,6]
})

pd.pivot_table(df, index="group", columns="panel", aggfunc="explode")

但是,"explode"不是有效的聚合函数.我想要这样的结果

       value   
panel     1  2
group         
1         0  4
2         1  5
2         2  NaN
3         3  6

推荐答案

你不应该聚合然后爆炸,你需要的是在pivot之前对索引进行重复数据消除:

out = (df.assign(idx2=df.groupby(['group', 'panel']).cumcount())
         .pivot(index=['group', 'idx2'], columns='panel')
      )

输出:

           value     
panel          1    2
group idx2           
1     0      0.0  4.0
2     0      1.0  5.0
      1      2.0  NaN
3     0      3.0  6.0

要消除droplevel的重复数据消除级别,请执行以下操作:

out = (df.assign(idx2=df.groupby(['group', 'panel']).cumcount())
         .pivot(index=['group', 'idx2'], columns='panel')
         .droplevel(1)
      )

输出:

      value     
panel     1    2
group           
1       0.0  4.0
2       1.0  5.0
2       2.0  NaN
3       3.0  6.0

中级:

# df.assign(idx2=df.groupby(['group', 'panel']).cumcount())

   group  panel  value  idx2
0      1      1      0     0
1      2      1      1     0
2      2      1      2     1  # will create a new row
3      3      1      3     0
4      1      2      4     0
5      2      2      5     0
6      3      2      6     0

Python相关问答推荐

Gekko解算器错误results.json未找到,无法找出原因

使用decorator 重复超载

Django序列化器没有验证或保存数据

Pandas 群内滚动总和

ambda将时间戳与组内另一列的所有时间戳进行比较

覆盖Django rest响应,仅返回PK

在matplotlib动画gif中更改配色方案

在应用循环中间保存pandas DataFrame

在Python和matlab中显示不同 colored颜色 的图像

分组数据并删除重复数据

三个给定的坐标可以是矩形的点吗

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

如何在虚拟Python环境中运行Python程序?

如何请求使用Python将文件下载到带有登录名的门户网站?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

部分视图的DataFrame

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

Python列表不会在条件while循环中正确随机化'

如何启动下载并在不击中磁盘的情况下呈现响应?

在极中解析带有数字和SI前缀的字符串