#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
Здесь вы собираете все имена столбцов, а затем перебираете весь набор данных, пока он будет найден. Затем выведите имя столбца.