首页 > 解决方案 > Pandas:索引的某些部分作为重复列值

问题描述

跟随“日期”和“总计”重复的数据框,但属性名称每次都是唯一的。

l0       l1                              Value
001  attribute1                           1
     attribute2                           5
     attribute3                           8
     date                                 1/1/20
     total                                500
002  somethingelse(notAttribute-1)        84
     somethingelse-entirely               24  
     date                                 2/2/20 
     total                                1000 
.
.
.
040 

需要指导以使其如下,因为这需要提取索引的特定部分(每个级别 0 (l0) 的级别 1 (l1) 的最后 2 个值。)

l0      l1                             Value     date     total
001  attribute1                           1       1/1/20    500
     attribute2                           5       1/1/20    500
     attribute3                           8       1/1/20    500   
002  somethingelse(notAttribute-1)        84      2/2/20    1000
     somethingelse-entirely               24      2/2/20    1000
.
.
.
040 

标签: pandas

解决方案


设置

df = pd.read_clipboard()
df = df.set_index(['l0','l1'])
print(df)
                                    Value
l0 l1                                    
1  attribute1                           1
   attribute2                           5
   attribute3                           8
   date                            1/1/20
   total                              500
2  somethingelse(not-attribute-1)      84
   somethingelse-entirely              24
   date                            2/2/20
   total                             1000

解决方案Series.unstack+DataFrame.melt

new_df = (df['Value'].unstack('l1')
                     .reset_index()
                     .melt(['l0','date','total'])
                     .dropna()
                     .set_index(['l0','l1']))
print(new_df)
                                     date total value
l0 l1                                                
1  attribute1                      1/1/20   500     1
   attribute2                      1/1/20   500     5
   attribute3                      1/1/20   500     8
2  somethingelse(not-attribute-1)  2/2/20  1000    84
   somethingelse-entirely          2/2/20  1000    24

推荐阅读