我正在处理这样一个数据框:
id Xp_1 Xp_2 Xp_4 Xt_1 Xt_2 Xt_3 Mp_1 Mp_2 Mp_3 Mt_1 Mt_2 Mt_6
0 i24 Nan 0.27 Nan 0.45 0.20 0.25 0.27 Nan Nan Nan Nan Nan
1 i25 0.45 0.47 0.46 0.22 0.42 Nan 0.42 0.05 0.43 0.12 0.01 0.04
2 i11 Nan Nan 0.32 0.14 0.32 0.35 0.29 0.33 Nan Nan 0.02 0.44
3 i47 Nan 0.56 0.59 0.92 Nan 0.56 0.51 0.12 Nan 0.1 0.1 Nan
如您所见,我有两个宏组(X 和 M),每个宏组有两个子集(p 和 t)。我想要实现的是两个宏组之间的“或”条件以及宏组的每个子集之间的“与”条件。
基本上,我想将那些对每个子集至少有两个值的行保留在至少一个组中。例如:i24应该被丢弃,其实Xps我们只有一个值,而且M组没有任何值。像 i11 这样的条目应该保留,实际上 X 组不满足条件,但 M 满足。 i25 也是如此,这两个组都满足条件。
我试过这个:
keep_r = (df.groupby(lambda col: col.split("_", maxsplit=1)[0], axis=1)
.count()
.ge(2)
.all(axis=1))
df = df.loc[keep_r]
但它会检查所有子集(Xp、Xt、Mp、Mt)中是否至少有两个值。相反,我想独立对待 X 和 M。
谢谢!