查找仅在某些列中具有值的行

我有一个这样的数据框:

>>> o1.columns

索引([1, 2, 3, 4, 5, 6, 'm1', 'm2', 7, 'm3', 8, 'm4', 9], dtype='object')

我想找到仅包含数据且仅在 m1、m2、m3 和 m4 中的行,但其余列为 nan 或空。是否可以?我或多或少尝试过如下:

>>> o11=o1[(1==@nan) && (2==@nan) && (3==@nan) && (4==@nan) && (5==@nan) && (6==@nan) && (7==@nan) && (8==@nan) && (9==@nan) && (o1.m1!=@nan) && (o1.m2!=@nan) && (o1.m3!=@nan) && (o1.m4!=@nan)]

但它不起作用。也试过“pd.query”。也许我错过了非常简单的事情。谢谢你的帮助


三国纷争
浏览 141回答 2
2回答

慕容3067478

沿着第一个轴调用notna/isna和any/,all以及掩码和索引。cols = ['m1', 'm2', 'm3', 'm4']diff = df.columns.difference(cols).tolist()df[df[cols].notna().any(1) & df[diff].isna().all(1)]这是假设您希望所有数据m*都不为空,反之亦然。

慕的地6264312

给定数据帧 df 为:df =          1    2    3    4    5    6    7    8    9   m1   m2    m3   m4    0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    3  NaN    4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  1.5  1.7  1.23  1.6    4  NaN    1  NaN  NaN    1  NaN  NaN  NaN   12  NaN  NaN   NaN  NaN    5  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    6  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    1  1.2   1.2  1.5    7  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    8  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN    9  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   NaN  NaN我们只希望返回索引 = 6 处的行(根据您的要求):m1 = df[[1,2,3,4,5,6,7,8,9]].isna().sum(axis = 1) == 9m2 = df[['m1', 'm2', 'm3', 'm4']].isna().sum(axis = 1) == 0df[m1 & m2]输出:     1    2    3    4    5    6    7    8    9 m1   m2   m3   m46  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  1  1.2  1.2  1.5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python