Найти имя столбца в Pandas, которое содержит указанное значение c в строке из другого столбца - PullRequest
1 голос
/ 17 февраля 2020

У меня есть 200 плюс столбцы на 10000 плюс строки. Я пытаюсь найти имя столбца, который содержит значение специфика c в строке. В приведенном ниже примере указанное значение c находится в столбце значений. То, как я определил значение в столбце «Значение», не имеет значения.

Пример: Value_Col - это значение, которое я пытаюсь вернуть.

Date   Time  A     B     C     D     E     F     Value   Value_Col
Jan1   1245  3.0   3.2   4.6   5.7   2.1   8.0   5.7     D
Jan2   1045  4.5   8.4   3.9   2.2   9.4   8.3   3.9     C
Jan3   1350  1.4   3.3   4.5   8.9   1.4   0.4   1.4     A

Я хочу искать только столбцы A через F и найдите имя столбца для первого экземпляра (крайнего левого) значения существует. В этом примере мое значение интереса появляется дважды в строке, начинающейся с даты 3 января. Я хочу в основном индексировать имена столбцов, значение которых появляется, и выбрать первое. Я понимаю, что это будет индекс 0 (или [0]) на основе списка, который возвращается для поиска значения.

Приведенный выше пример представляет собой лишь небольшое подмножество данных. В настоящее время у меня есть список всех имен столбцов, в которых я хочу выполнить поиск значений. Интересующее значение может появляться во многих столбцах в одной строке.

1 Ответ

0 голосов
/ 17 февраля 2020

Я хочу найти только столбцы от A до F и найти имя столбца для первого (крайнего левого) значения.

Вы можете использовать idxmax на axis=1 после сравнивая столбец Value со срезом кадра данных (используя .loc[])

df['Value_Col'] = df.loc[:,'A':'F'].isin(df['Value']).idxmax(1)
print(df)

   Date  Time    A    B    C    D    E    F  Value Value_Col
0  Jan1  1245  3.0  3.2  4.6  5.7  2.1  8.0    5.7         D
1  Jan2  1045  4.5  8.4  3.9  2.2  9.4  8.3    3.9         C
2  Jan3  1350  1.4  3.3  4.5  8.9  1.4  0.4    1.4         A

Если есть вероятность, что ни один из столбцов не может содержать значение df['Value], вы можно использовать:

m = df.loc[:,'A':'F']
df['Value_Col'] = m.isin(df['Value']).dot(m.columns).str[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...