Возврат имени столбца для указанного значения в пандах - PullRequest
1 голос
/ 07 октября 2019

Мой вопрос - расширение , этот вопрос . Хотя задаваемый вопрос один и тот же, ответы применимы только к очень конкретной ситуации.

Предполагая тот же набор данных, я хочу добавить столбец с именем столбца, содержащим определенное значение

Date               col1    col2    col3    col4    col5    col6    col7 
01/01/2016 00:00   37.04   36.57   35.77   37.56   36.79   35.90   38.15 

Однако яимеют большое количество строк, и значение, которое я хочу найти, не является ни максимальным, ни минимальным (скажем, я хочу назвать col со значением 36,79).

1 Ответ

1 голос
/ 07 октября 2019

Можно сравнить все значения DataFrame и проверить хотя бы одно True на DataFrame.any - тогда маска используется для имен столбцов фильтра:

c = df.columns[(df == 36.79).any()].tolist()

Нопотому что работа с плавающей точкой и возможные некоторые проблемы с точностью лучше использовать numpy.isclose с выбором только числовых столбцов:

#if possible some non numeric columns
df1 = df.select_dtypes(np.number)
c = df1.columns[np.any(np.isclose(df1, 36.79), axis=0)].tolist()

#if all columns are numeric
c = df.columns[np.any(np.isclose(df, 36.79), axis=0)].tolist()

Пример :

print (df)
               Date   col1   col2   col3   col4   col5  col6   col7
0  01/01/2016 00:00  37.04  36.57  35.77  37.56  36.79  35.9  38.15
1  01/02/2016 00:00  37.04  36.57  35.77  37.56  36.79  35.9  36.79 <-last value changed

df1 = df.select_dtypes(np.number)
c = df1.columns[np.any(np.isclose(df1, 36.79), axis=0)].tolist()
print (c)
['col5', 'col7']

Последнее, если требуется первое найденное значение, если существует возможность, используйте next с iter для возможного значения по умолчанию для передачи, если пустой список (без совпадения значений):

print (next(iter(c), 'no match'))
col5

df1 = df.select_dtypes(np.number)
c = df1.columns[np.any(np.isclose(df1, 100), axis=0)].tolist()
print (c)
[]

print (next(iter(c), 'no match'))
no match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...