如果特定列仅包含该 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
你想要 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
我有一个看起来像这样的多索引数据框(但有超过 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
你想要 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