使用explode()作为聚合函数[重复]

问题描述 投票:0回答:1

如何在 pd.pivot_table()

分解重复的索引行?

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
python pandas aggregate pivot-table
1个回答
0
投票

你不应该聚合然后爆炸,你需要的是在之前去重索引

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
© www.soinside.com 2019 - 2024. All rights reserved.