Расположение столбца последнего соответствующего значения в строке данных (Python) - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий фрейм данных:

df1 = pd.DataFrame({1:[1,2,3,4], 2:[1,2,4,5], 3:[8,1,5,6]})

df1
Out[7]: 
   1  2  3
0  1  1  8
1  2  2  1
2  3  4  5
3  4  5  6

, и я хотел бы создать новый столбец, который будет показывать расстояние последнего столбца с конкретным значением, в данном случае 2, от контрольного столбца,3 в этом примере или вернуть результат NaN, если в строке не найдено такое значение.Вывод будет выглядеть примерно так:

df1
Out[11]: 
   1  2  3 dist
0  1  1  8  NaN
1  2  2  1    1
2  3  4  5  NaN
3  4  5  6  NaN

Каким будет эффективный способ решения этой задачи?

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, нужно вычесть 3 (последний), потому что ссылочный столбец с именем столбца последней 2:

df1.columns = df1.columns.astype(int)

print((df1.columns.max() - df1.eq(2).iloc[:,::-1].idxmax(axis=1)).mask(lambda x: x == 0))
0    NaN
1    1.0
2    NaN
3    NaN
dtype: float64

Подробности :

Сравнить по2:

print (df1.eq(2))
       1      2      3
0  False  False  False
1   True   True  False
2  False  False  False
3  False  False  False

Обратный порядок столбцов:

print (df1.eq(2).iloc[:,::-1])
       3      2      1
0  False  False  False
1  False   True   True
2  False  False  False
3  False  False  False

Проверить имя столбца первого True (поскольку обратные столбцы являются последними)

print (df1.eq(2).iloc[:,::-1].idxmax(axis=1))
0    3
1    2
2    3
3    3
dtype: int64

Вычитать по максимальному значению, но также возвращает 0, если значение в контрольном столбце и если не совпадают значения:

print (df1.columns.max() - df1.eq(2).iloc[:,::-1].idxmax(1))
0    0
1    1
2    0
3    0
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...