首页 > 解决方案 > 从一组连续的 n 行中选择具有最大非 na 列的行

问题描述

我有一个带有时间索引的 df,以及一些带有数值的列,但在某些情况下也包含缺失值。例如:

timeindex   ColA    ColB    ColC
00:02:00      454    436    4334
00:04:00             653
00:06:00      3423   4354 
00:08:00      3432
00:10:00      2343
00:12:00     32432          23423

我想创建数据框的一个子集,以便对于每组连续的 3 行,它选择缺失值数量最少的行。所以对于上面的 df,subsetdf 看起来像:

timeindex   ColA    ColB    ColC
00:02:00      454    436    4334
00:12:00     32432          23423

你能告诉我如何做到这一点吗?

标签: pythonpandasdatetime

解决方案


用于df.filter选择列,检查空字符串,sum在轴 1 上,然后最后groupby.idxmax

idx = (df.assign(count=df.filter(like="Col").notnull().sum(1))
         .groupby(np.arange(len(df))//3)["count"].idxmax())

print (df.loc[idx])

  timeindex   ColA ColB   ColC
0  00:02:00    454  436   4334
5  00:12:00  32432       23423

推荐阅读