Возникла проблема с удалением всех экземпляров данной серии из всего 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