Pandas Dataframe MultiIndex将多索引的一个级别转换为另一个轴,同时将另一个级别保留在原始轴上

2024-09-29 18:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在行索引器中有一个Pandas Dataframe,其中MultiIndex如下所示:

enter image description here

{btxer3>的一个{btxer3>级的索引器仍然是{btxer3>的一个索引器。在

这就是我想要达到的目的:

enter image description here

我需要做什么手术才能达到这个目的?另外,如果题目可以改进,请提出建议。在


Tags: 目的dataframepandas建议手术题目multiindexbtxer3
2条回答

由于某些条目有NaN值,因此在取消其中一个索引时,您可能需要考虑pivot table,以避免“重复条目”值错误。在

假设您有df数据帧,列'SlabLT',索引为date和{},请尝试:

df.reset_index().pivot_table(values = 'SlabLT', index = 'date', columns = 'SlabLT')

^{}与选择列SlabLT一起使用:

print (df['SlabLT'].unstack())

但是如果MultiIndex中可能的重复是必需的聚合列,例如mean

^{pr2}$

样本

df = pd.DataFrame({'date':['2017-10-01','2017-10-08','2017-10-08','2017-10-15', '2017-10-15'],
                   'SlabType':['UOM2','AMOUNT','UOM2','AMOUNT','AMOUNT'],
                   'SlabLT':[1,6000,1,6000,5000]}).set_index(['date','SlabType'])

print (df)
                     SlabLT
date       SlabType        
2017-10-01 UOM2           1
2017-10-08 AMOUNT      6000
           UOM2           1
2017-10-15 AMOUNT      6000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'
           AMOUNT      5000 <-duplicated MultiIndex '2017-10-15', 'AMOUNT'

print (df['SlabLT'].unstack())

ValueError: Index contains duplicate entries, cannot reshape


print (df.groupby(level=[0,1])['SlabLT'].mean())
date        SlabType
2017-10-01  UOM2           1
2017-10-08  AMOUNT      6000
            UOM2           1
2017-10-15  AMOUNT      5500
Name: SlabLT, dtype: int64

print (df.groupby(level=[0,1])['SlabLT'].mean().unstack())
SlabType    AMOUNT  UOM2
date                    
2017-10-01     NaN   1.0
2017-10-08  6000.0   1.0
2017-10-15  5500.0   NaN

相关问题 更多 >

    热门问题