我有一个多索引数据框,看起来像这样(但有超过20k行和大约100列)。
x1 x2 x3
Time ID
1 1 1 2 NaN
2 1 1 2 3
1 2 1 2 NaN
2 2 1 2 NaN
我想丢弃所有的ID,这些ID的列数x3只包含NaNs,但保留那些可能包含NaNs但也有一些实际值的ID。对于上面的例子,我所希望的输出是。
x1 x2 x3
Time ID
1 1 1 2 NaN
2 1 1 2 3
你想要 any
关于 groupby
:
df[df.x3.notnull().groupby('ID').transform('any')]
输出。
x1 x2 x3
Time ID
1 1 1 2 NaN
2 1 1 2 3.0
我们可以做到 dropna
与 isin
df=df.loc[df.index.get_level_values(1).isin(df.dropna().index.get_level_values(1))]
Out[71]:
x1 x2 x3
Time ID
1 1 1 2 NaN
2 1 1 2 3.0