如果特定列仅包含该 ID 的 NaAs,则删除多索引数据帧的 ID

Dropping ID of multiindex dataframe if a specific column only includes NaAs for that ID

我有一个看起来像这样的多索引数据框(但有超过 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

我想删除所有列 x3 仅包含 NaN 的 ID,但保留可能包含 NaN 但也有一些实际值的 ID。对于上面的例子,我想要的输出是:

         x1  x2  x3
Time ID
1    1   1   2   NaN
2    1   1   2   3

你想要 anygroupby:

df[df.x3.notnull().groupby('ID').transform('any')]

输出:

         x1  x2   x3
Time ID             
1    1    1   2  NaN
2    1    1   2  3.0

我们可以 dropnaisin

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