Отбросить серию из всего DF, если в строке есть хотя бы 2 значения NaN - PullRequest
1 голос
/ 07 января 2020

Возникла проблема с удалением всех экземпляров данной серии из всего DF с .dropna(thresh= x), который, как я думал, был Ранее разрешен

Фрейм данных:

Обратите внимание, что он мультииндексирован

          2001     2002     2003    2004

bob   A   123      31       4        12
bob   B   41        1       56       13
bob   C   nan      nan      4        nan

bill  A   451      8        nan      24
bill  B   32       5        52        6
bill  C   623      12       41       14

#Repeating features (A,B,C) for each index/name

Это отбрасывает одну строку / экземпляр , где выполняется условие thresh=, но оставляет другие экземпляры этой функции.

отбрасывают серию из всего df , если thresh соответствует какой-либо одной строке, например:

df.dropna(thresh = 2, inplace=True):

           2001     2002     2003    2004

bob    A    123      31       4        12
bob    B    41        1       56       13

bill   A    451      8        nan      24
bill   B    32       5        52        6

#Drops C from the whole df

Решение, которое я использую:

m = df.notna().sum(1).groupby(level=1).transform(lambda x: x.ge(2).all())
df_final = df[m]

Кажется, не работает для всего DF

Я считаю, что я просто не применяйте его правильно ... Любой совет будет признателен за то, как полностью реализовать это ^ или другое решение:

a = df.notna().sum(1).lt(2).loc[lambda x: x].index.get_level_values(1)
df_final = df.query('ilevel_1 not in @a')

Обратите внимание, что в фактическом DF будет более одной серии, которая соответствует порогу nan и поэтому должна быть удалена ...

Дополнительные пояснения к Ex Результат:

с использованием

from collections import Counter

pd.DataFrame(Counter(df.series).keys(), Counter(df.series).values())

#Where series is the index_level_1 (A,B,C etc.)

Я ожидал бы вывод:

2   A
2   B
...

#Where the count of the series keys is the same for each series
...