我有一个包含两列的数据框,传递的秒数和一个值。在经过的秒数行中,数据帧有时会跳过一秒钟(数据丢失)。我想填写缺失的秒数并内插缺失的值。
到目前为止,我一直在尝试对数据帧进行第一次和最后一次测量,并排列一个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,未合并。有没有一种方法可以达到预期的结果,我是在正确的轨道上吗,还是可以更容易地做到这一点?
答案 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)