Как я могу выбрать имена столбцов, в которых выполняется условие

#pandas

#pandas

Вопрос:

Мне нужно выбрать имена столбцов, в которых количество больше 2. У меня есть этот набор данных:

     Index | col_1 | col_2 | col_3 | col_4 
    -------------------------------------
      0   |   5   |  NaN  |   4   |  2
      1   |   2   |   2   |  NaN  |  2
      2   |  NaN  |   3   |  NaN  |  1
      3   |   3   |  NaN  |  NaN  |  1
  

Ожидаемым результатом является список: [‘col_1’, ‘col_4’]

Когда я использую

     df.count() > 2
  

Я получаю

     col_1 True
    col_2 False
    col_3 False
    col_4 True
    Length: 4, dtype: bool
  

Это код для тестирования

     import pandas as pd
    import numpy as np

    data = {'col_1': [5, 2, np.NaN, 3],
            'col_2': [np.NaN, 2, 3, np.NaN],
            'col_3': [4, np.NaN, np.NaN, np.NaN],
            'col_4': [2, 2, 1,1]}

    frame = pd.DataFrame(data)

    frame.count() > 2
  

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

1. просто используйте: df.loc[:,df.count()>2] для столбцов df.loc[:,df.count()>2].columns

Ответ №1:

Вы можете сделать это таким образом.

 import pandas as pd
import numpy as np

data = {'col_1': [5, 2, np.NaN, 3],
        'col_2': [np.NaN, 2, 3, np.NaN],
        'col_3': [4, np.NaN, np.NaN, np.NaN],
        'col_4': [2, 2, 1,1]}

frame = pd.DataFrame(data)

expected_list = []
for col in list(frame.columns):
    if frame[col].count() > 2:
        expected_list.append(col)
  

Ответ №2:

Использование dict может легко решить эту проблему:

 frame[[key for key, value in dict(frame.count() > 2).items() if value]]
  

Ответ №3:

Попробуйте:

(df.columns)[(df.count() > 2).values].to_list()