为Pandas数据帧编制索引

2024-10-01 09:16:11 发布

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

我有一个MultindexDataFrame,其结构如下:

       0     1     2     ref
A  B             
21 45  0.01  0.56  0.23  0.02
22 45  0.30  0.88  0.53  0.87
23 46  0.45  0.23  0.90  0.23

我想做的是:
从列[0:2]中选择最接近列“ref”的值,因此预期结果将是:

^{pr2}$

Tags: ref结构pr2multindexdataframe
1条回答
网友
1楼 · 发布于 2024-10-01 09:16:11

重建您的DataFrame

In [1]: index = MultiIndex.from_tuples(zip([21,22,23],[45,45,46]), names=['A', 'B'])
In [2]: df = DataFrame({0:[0.01, 0.30, 0.45], 
                        1:[0.56, 0.88, 0.23], 
                        2:[0.23, 0.53, 0.90], 
                        'ref': [0.02, 0.87, 0.23]}, index=index)
In [3]: df
Out[3]: 
        0     1     2   ref
A  B                         
21 45  0.01  0.56  0.23  0.02
22 45  0.30  0.88  0.53  0.87
23 46  0.45  0.23  0.90  0.23

我首先从ref得到01和{}列的绝对距离:

^{pr2}$

现在,dist您可以使用DataFrame.idxmin按行确定具有最小值的列:

In [5]: idx = dist.idxmin(axis=1)
In [5]: idx
Out[5]: 
A   B 
21  45    0
22  45    1
23  46    1

现在要生成新的closest,那么只需使用idx来索引df

In [6]: df['closest'] = idx.index.map(lambda x: df.ix[x][idx.ix[x]])
In [7]: df
Out[7]: 
        0     1     2   ref  closest
A  B                                  
21 45  0.01  0.56  0.23  0.02     0.01
22 45  0.30  0.88  0.53  0.87     0.88
23 46  0.45  0.23  0.90  0.23     0.23

最后一步,可能会有一个更优雅的方法来做,但我对熊猫比较陌生,这是我现在能想到的最好的方法。在

相关问题 更多 >