python pandas dataframe如何在每个时间段应用函数

时间:2019-04-30 03:23:24

标签: python pandas dataframe

我有以下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

如何实现?

1 个答案:

答案 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