Выбор нескольких столбцов на основе значений - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть следующий фрейм данных:

df = pd.DataFrame({ 'Group' : [1,1,1,2,2,2,2],
               'Type' : ["High","Medium","Low","High","Medium","Low","Low"],
               'set_0' :["a","a","a","a","a","a","a"],
               'set_1' :["b","b","b","c","c","c","d"],
               'set_2' :["e","e","e","NULL","NULL","f","f"],
               'set_3' :["g","g","NULL","NULL","NULL","NULL","NULL"],
               'set_4' :["NULL","NULL","NULL","NULL","NULL","NULL","NULL"],
               'set_5' :["NULL","NULL","NULL","NULL","NULL","NULL","NULL"],
               'set_6' :["h","h","NULL","NULL","NULL","NULL","NULL"]
                                 })

Я хочу отбросить некоторые из столбцов "set_". Если связанный столбец "set_" имеет все значения "NULL", я не хочу, чтобы код сохранял их. Я хочу сохранить только столбцы set_ там, где они содержат хотя бы одно значение, отличное от NULL.

Как я могу справиться с этим без жесткого кодирования?

1 Ответ

0 голосов
/ 07 ноября 2018

Сначала выберите object dtype series и сравните его с указанной строкой. Затем используйте pd.DataFrame.loc с логическим индексированием или pd.DataFrame.drop:

idx = df.select_dtypes(['object']).eq('NULL').all()

df = df.loc[:, ~df.columns.isin(idx[idx].index)]

# alternative:
# df = df.drop(idx[idx].index, 1)

print(df)

   Group    Type set_0 set_1 set_2 set_3 set_6
0      1    High     a     b     e     g     h
1      1  Medium     a     b     e     g     h
2      1     Low     a     b     e  NULL  NULL
3      2    High     a     c  NULL  NULL  NULL
4      2  Medium     a     c  NULL  NULL  NULL
5      2     Low     a     c     f  NULL  NULL
6      2     Low     a     d     f  NULL  NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...