首页 > 解决方案 > 导出 pandas 数据框中的最小值及其各自的列推导

问题描述

我有一个数据框:

data = np.array([[10,50,75,'test1','test2','test3'], 
                 [1000,500,175,'test1','test2','test3'], 
                 [500,50,750,'test1','test2','test3'], 
                 [1,500,5,'test1','test2','test3'],
                [50,500,15,'test1','test2','test3']]) 


df = pd.DataFrame(data, columns = ['distance_1', 'distance_2','distance_3', 'distance_1_rep', 'distance_2_rep', 'distance_3_rep'])
df.distance_1 = df.distance_1.astype('int64')
df.distance_2 = df.distance_2.astype('int64')
df.distance_3 = df.distance_3.astype('int64')

我正在使用 distance_1,2,3 列之间找到最小距离

df['min_distance'] = df[['distance_1','distance_2','distance_3']].min(axis=1)

在此处输入图像描述

现在我想推导出另一列:

它给出了与 distance_1、distance_2、distance_3 的最小值相对应的 distance_1_rep 或 distance_2_rep 或 distance_3_rep 值

对于输出,值应该是

[test1,test3,test2,test1,test3]

我将如何得出它?

标签: pythonpandasdataframe

解决方案


这本质上是一个lookup问题,我们首先选择列,然后使用alongdistance找到最小值的索引,然后使用这些索引在相应的类似列中查找值argminaxis=1_rep

c = df.filter(regex='distance_\d+$')
df['new_col'] = df[c.columns + '_rep'].values[df.index, c.values.argmin(1)]

   distance_1  distance_2  distance_3 distance_1_rep distance_2_rep distance_3_rep new_col
0          10          50          75          test1          test2          test3   test1
1        1000         500         175          test1          test2          test3   test3
2         500          50         750          test1          test2          test3   test2
3           1         500           5          test1          test2          test3   test1
4          50         500          15          test1          test2          test3   test3

推荐阅读