Для повышения производительности не используйте groupby
, лучший способ - получить все имена по условию и отфильтровать по isin
:
Если пустое значение NaN
, вам нужно только изменить == ''
на .isnull()
.
names = df.loc[(df.iloc[:, 1:] == '').any(axis=1), 'name']
#alternative
#names = df.loc[(df.drop('names', axis=1) == '').any(axis=1), 'name']
df = df[~df['name'].isin(names)]
print (df)
name c0 c1 c2
273142 OMN 1 1 1
256278 OMN 1 1 1
Деталь
Проверить все значения без первого столбца по условию:
print ((df.iloc[:, 1:] == ''))
c0 c1 c2
193556 False True True
273142 False False False
256278 False False False
41165 False False False
339649 False False False
Проверьте, есть ли хотя бы один True
на столбец с any
:
print ((df.iloc[:, 1:] == '').any(axis=1))
193556 True
273142 False
256278 False
41165 False
339649 False
dtype: bool
Получить имена, фильтруя столбец name
:
print (df.loc[(df.iloc[:, 1:] == '').any(axis=1), 'name'])
193556 INFO
Name: name, dtype: object