возвращает имя столбца из таблицы, где определенное значение в любой строке было найдено с помощью python и pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

В таблице разные значения. Однако в других столбцах из других строк есть одинаковые значения (First = Заголовок / имя столбца):

 |---------------------|------------------|------------------|
|          A          |     B            |     C            |
|---------------------|------------------|------------------|
|          100        |     200          |     300          |
|---------------------|------------------|------------------|
|          400        |     100          |     500          |
|---------------------|------------------|------------------|
|          600        |     700          |     800          |
|---------------------|------------------|------------------|
  

Для печати всех строк с определенным значением, например 100, я использую следующий код python:

 import pandas as pd

df = pd.read_excel('test.xlsx', sheet_name='test1')

dfObject = df[df.isin([100]).any(axis=1)]

print(dfObject)
  

повторное использование в выводе, подобном этому:

 |---------------------|------------------|------------------|
|          A          |     B            |     C            |
|---------------------|------------------|------------------|
|          100        |     200          |     300          |
|---------------------|------------------|------------------|
|          400        |     100          |     500          |
|---------------------|------------------|------------------|
  

Есть ли какой-либо способ напечатать только имена столбцов, в которых указано конкретное значение, подобным этому (также с помощью distinct):

 |---------------------|
|          A          |
|---------------------|
|          B          |
|---------------------|
  

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

1. вы можете просто сохранить имена столбцов print (df.columns.values) в списке и распечатать.

2. Вам следует немного прояснить свой вопрос, посмотрите на различные ответы ниже.

3. @SzymonMaszke первый ответ — это именно то, что я искал, и anky_91 потребовалось всего несколько минут, чтобы понять суть. Исходя из этого, у меня другое мнение по поводу пересмотра ответа. И поскольку я довольно долго искал решение, я думаю, это могло бы помочь и другим. грустно видеть множество отрицательных голосов.

4. За исключением того, что он добавил, IIUC что означает If I understand correctly . Это также не указывает на то, что он считает этот вопрос правильно поставленным. Рад, что вы получили решение, которое искали, хотя.

Ответ №1:

IIUC, используйте:

 df.columns[df.eq(100).any()]

#Index(['A', 'B'], dtype='object')
  

Чтобы получить выходные данные в виде серии, вызовите pd.Series() : pd.Series(df.columns[df.eq(100).any()])

Ответ №2:

Да, просто используйте columns атрибут, подобный этому:

df[df.isin([100]).any(axis=1)].columns