我有以下dataframe
,
df = pd.DataFrame({'col1':range(9), 'col2': list(range(7)) + [np.nan] *2},
index = pd.date_range('1/1/2000', periods=9, freq='0.5S'))
df
Out[109]:
col1 col2
2000-01-01 00:00:00.000 0 0.0
2000-01-01 00:00:00.500 1 1.0
2000-01-01 00:00:01.000 2 2.0
2000-01-01 00:00:01.500 3 3.0
2000-01-01 00:00:02.000 4 4.0
2000-01-01 00:00:02.500 5 5.0
2000-01-01 00:00:03.000 6 6.0
2000-01-01 00:00:03.500 7 NaN
2000-01-01 00:00:04.000 8 NaN
从上面可以看出,每秒有两个数据点。我想对两行进行操作,如果最新行中的两个列都具有有效编号,则将选择该行;如果最后一行的任何cols无效,我们将看到上一行对bot col有效;如果有效,我们将选择上一行,否则将跳过第二行。可以恢复的数据帧如下所示,
col1 col2
2000-01-01 00:00:00.000 1 1.0
2000-01-01 00:00:01.000 3 3.0
2000-01-01 00:00:02.000 5 5.0
2000-01-01 00:00:03.000 6 6.0
如何实现?
答案 0 :(得分:0)
这是在dropna我们重新编制索引后使用reindex
的一种方法,然后两列都变为NaN
,在这种情况下,如果我们使用last
,则不会从中选择任何项目行(与您先前的问题相关)
df.dropna().reindex(df.index).resample('1s').last().dropna()
Out[175]:
col1 col2
2000-01-01 00:00:00 1.0 1.0
2000-01-01 00:00:01 3.0 3.0
2000-01-01 00:00:02 5.0 5.0
2000-01-01 00:00:03 6.0 6.0