如何使用Pandas在数据框中生成缺失的增量行值?

时间:2019-04-16 15:28:27

标签: python-3.x pandas

我有一个包含两列的数据框,传递的秒数和一个值。在经过的秒数行中,数据帧有时会跳过一秒钟(数据丢失)。我想填写缺失的秒数并内插缺失的值。

到目前为止,我一直在尝试对数据帧进行第一次和最后一次测量,并排列一个Numpy数组,该数组包含从头到尾传递的所有秒数,将其转换为与第一个匹配的数据帧,并尝试合并或合并它们。

原始df如下:

   seconds   value
0     1        5.560000
1     3        5.590000
2     4        5.620000
3     5        5.646667
4     7        5.653333
5     9        5.760000

然后我创建另一个数据框df2:

   seconds   value
0     1        NaN
1     2        NaN
2     3        NaN
3     4        NaN
4     5        NaN
5     6        NaN
6     7        NaN
7     8        NaN
8     9        NaN

我试图将它们合并在一起,就像这样

df = df.merge(df2, how='left')

我期望输出是

   seconds   value
0     1        5.560000
1     2        NaN
2     3        5.590000
3     4        5.620000
4     5        5.646667
5     6        NaN
6     7        5.653333
7     8        NaN
8     9        5.760000

,但实际输出是df或df2,未合并。有没有一种方法可以达到预期的结果,我是在正确的轨道上吗,还是可以更容易地做到这一点?

2 个答案:

答案 0 :(得分:3)

您不需要第二个df,请使用df.reindex()

df=df.set_index('seconds')
df=df.reindex(range(df.index.min(),df.index.max()+1)).reset_index()

如果有必要使用第二个df,则可以使用:

df=df.set_index('seconds').combine_first(df2.set_index('seconds')).reset_index()

   seconds     value
0        1  5.560000
1        2       NaN
2        3  5.590000
3        4  5.620000
4        5  5.646667
5        6       NaN
6        7  5.653333
7        8       NaN
8        9  5.760000

答案 1 :(得分:2)

我正在使用update并解决您的问题

df1.set_index('seconds',inplace=True)
df2.set_index('seconds',inplace=True)
df2.update(df1)
df2.reset_index(inplace=True)