2 回答

TA贡献1773条经验 获得超3个赞
沿着第一个轴调用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*都不为空,反之亦然。

TA贡献1817条经验 获得超6个赞
给定数据帧 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) == 9
m2 = df[['m1', 'm2', 'm3', 'm4']].isna().sum(axis = 1) == 0
df[m1 & m2]
输出:
1 2 3 4 5 6 7 8 9 m1 m2 m3 m4
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 1.2 1.2 1.5
添加回答
举报