Как получить имя столбца из указанного c значения в строке в Python - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть фрейм данных, который выглядит следующим образом:

listing_id  price_4 price_5 price_6 price_7 price_8 price_9 min_price
0   42729   173.0   170.0   158.0   140.0   150.0   150.0   140.0
1   23135   184.0   180.0   173.0   150.0   160.0   160.0   150.0
2   138216  141.0   141.0   141.0   148.0   101.0   100.0   100.0
3   164989  146.0   121.0   121.0   121.0   121.0   121.0   121.0
4   301034  144.0   141.0   72.0    53.0    53.0    100.0   53.0

Как вы можете понять, min_price заполняется минимальным значением из каждой строки. Я хочу создать еще один столбец, который будет заполнен именем столбца, где значение является минимальным. Например, для строки 0 значение должно быть price_7, для строки 1 значение должно быть также price_7 и т. Д. Если это возможно, я бы хотел сделать это без столбца min_price (я создал его только для этого).

Спасибо!

1 Ответ

2 голосов
/ 10 апреля 2020

Используйте DataFrame.filter с DataFrame.idxmin:

df['new'] = df.filter(like='price_').idxmin(axis=1)
print (df)
   listing_id  price_4  price_5  price_6  price_7  price_8  price_9  \
0       42729    173.0    170.0    158.0    140.0    150.0    150.0   
1       23135    184.0    180.0    173.0    150.0    160.0    160.0   
2      138216    141.0    141.0    141.0    148.0    101.0    100.0   
3      164989    146.0    121.0    121.0    121.0    121.0    121.0   
4      301034    144.0    141.0     72.0     53.0     53.0    100.0   

   min_price      new  
0      140.0  price_7  
1      150.0  price_7  
2      100.0  price_9  
3      121.0  price_5  
4       53.0  price_7  

Или, если хотите, чтобы все столбцы без первого были DataFrame.iloc с нарезкой:

df['new'] = df.iloc[:, 1:].idxmin(axis=1)

Или, если хотите, чтобы все столбцы без первого и последнего:

df['new'] = df.iloc[:, 1:-1].idxmin(axis=1)
...