pandas中多索引列的两两相减

2024-07-08 15:02:47 发布

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

我有这种类型的pd数据帧(列中有多索引):

    measurement meas1           meas2            ...
    observer    obs1 obs2       obs1 obs2        ...

1               1   1           1    1
2               2   1           6    3  
3               2   3           3    2

列索引是唯一的。 我想为每个测量的观察者之间的差异创建一个数据帧:

 measurement    meas1           meas2            ...
 observerpair   (obs1,obs2)     (obs1,obs2)        ...

1               0                  0
2               1                  3  
3               -1                 1

我尝试了两个不同的for循环来创建差异数据帧。这个在里面:

data[('meas1','obs1')].subtract(data[('meas1','obs2')])

或者

data[('meas1','obs1')] - data[('meas1','obs2')]

我可以单独显示每一列,但每当我执行这两个计算中的一个时,就会得到如下结果:

    measurement meas1           
    observer    obs1 obs2       

1               NaN NaN           
2               NaN NaN            
3               NaN NaN            

我已经尝试了同样结构的另一个数据帧(由同样的脚本自动生成),这个问题从未发生过。正如我提到的,我自己检查了这些列,它们在这样调用时看起来很正常:

data[('meas1','obs1')]

Tags: 数据类型fordata差异nanobserver观察者
1条回答
网友
1楼 · 发布于 2024-07-08 15:02:47

可以对MultiIndex^{}中的select列使用^{}

df1 = df.xs('obs1', axis=1, level=1).sub(df.xs('obs2', axis=1, level=1))
print (df1)
measurement  meas1  meas2
1                0      0
2                1      3
3               -1      1

如果要在输出中添加^{}

df1 = df.xs('obs1', axis=1, level=1).sub(df.xs('obs2', axis=1, level=1))
df1.columns = pd.MultiIndex.from_product([df1.columns, ['obs1,obs2']], 
                                         names=df.columns.names)
print (df1)
measurement      meas1     meas2
observerpair obs1,obs2 obs1,obs2
1                    0         0
2                    1         3
3                   -1         1

相关问题 更多 >

    热门问题