Pandas — найти столбец с определенным значением во всем фрейме данных

#python #python-3.x #pandas #numpy #dataframe

#python #python-3.x #pandas #numpy #фрейм данных

Вопрос:

У меня есть фрейм данных, в котором есть несколько столбцов. Существует столбец со значением, которое появляется только один раз во всем фрейме данных. Я хочу написать функцию, которая возвращает имя столбца столбца с этим конкретным значением. Я могу вручную найти, какой это столбец, с помощью обычного исследования данных, но поскольку у меня есть несколько фреймов данных с одинаковыми свойствами, мне нужно иметь возможность находить этот столбец для нескольких фреймов данных. Таким образом, несколько обобщенная функция была бы более полезной.

Проблема в том, что я заранее не знаю, какой столбец я ищу, поскольку в каждом фрейме данных позиция этого конкретного столбца с этим конкретным значением отличается. Кроме того, нужные столбцы в разных фреймах данных имеют разные имена, поэтому я не могу использовать что-то вроде df[‘my_column’] для извлечения столбца.

Спасибо

Комментарии:

1. Добро пожаловать в stackoverflow. Пожалуйста, предоставьте работоспособный пример с вводом и желаемым результатом.

2. знаете ли вы, является ли тип данных the во всех сценариях?

3. @Manakin — Да, тип данных одинаков во всех сценариях.

4. df.select_dtypes('your_dtype').eq('target_value').any() должно сработать. Я вторю @Stefan, вам следует добавить некоторые фиктивные данные, чтобы проиллюстрировать вашу проблему.

Ответ №1:

Вам нужно будет перебирать столбцы и искать значение:

 def find_col_with_value(df, value):

    for col in df:
        if (df[col] == value).any():
             return col
 

Это вернет имя первого столбца , который содержит value . Если значение не существует, оно вернется None .

Комментарии:

1. Спасибо, Кайл, ваш ответ полностью сработал для моей проблемы.

Ответ №2:

Проверьте весь фрейм данных на наличие определенного значения, проверяя any , появляется ли оно когда-либо в столбце, затем нарежьте столбцы (или фрейм данных, если вам нужна серия)

 import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.normal(0, 5, (100, 200)),
                  columns=[chr(i 40) for i in range(200)])
df.loc[5, 'Y'] = 'secret_value'  # Secret value in column 'Y'

df.eq('secret_value').any().loc[lambda x: x].index
# or
df.columns[df.eq('secret_value').any()]
 

 Index(['Y'], dtype='object')
 

Ответ №3:

У меня есть другое решение:

 names = ds.columns
for i in names:
    for j in ds[i]:
        if j == 'your_value':
            print(i)
            break
 

Здесь вы собираете все имена столбцов, а затем перебираете весь набор данных, пока он будет найден. Затем выведите имя столбца.