使用datetime索引根据时间在pandas数据帧中插入行

时间:2018-03-31 22:12:14

标签: python pandas datetime

我有两个数据框如下所示:

df1 = 
index                 value

2014-05-21 09:30:00    0.0       
2014-05-21 10:00:00   10.0
2014-05-21 10:30:00    3.0

.....

2017-07-10 22:30:00   18.3
2017-07-10 23:00:00    7.6
2017-07-10 23:30:00    0.0

长度等于 55037 ,另一个

df2 = 
index                 value

2014-05-21 09:00:00    0.0
2014-05-21 10:00:00   13.0

.....

2017-07-10 21:00:00    1.6
2017-07-10 22:00:00   32.1
2017-07-10 23:00:00    7.6

长度等于 27519 ,上面的两个数据帧是groupby,具有不同的时间步长,现在我想匹配时间步在开头和结尾自动

例如, df1 中缺少“2014-05-21 09:00:00”,如何编写函数,将 df1 放入其中会检查开头和结尾是否匹配   df2 ,然后返回一个新的 df1 ,它在开头和结尾等于 df2 ,值等于零。

所以最后新的df1如下所示,

new_df1 = 
index                 value

2014-05-21 09:00:00    0.0 
2014-05-21 09:30:00    0.0       
2014-05-21 10:00:00   10.0
2014-05-21 10:30:00    3.0

 .....

2017-07-10 22:30:00   18.3
2017-07-10 23:00:00    7.6
2017-07-10 23:30:00    0.0

且长度等于 55038 (确保它是 df2 的两倍)

有人有想法吗?谢谢你!

2 个答案:

答案 0 :(得分:1)

您可以选择df1,其中索引与df2的开头和结尾匹配。

df1.loc[beginning(df2):end(df2)]

您需要确保df1的项目确实正确,因为它将按顺序返回开头和结尾之间的位置。如果时间戳是日期时间对象,则在调用df1.sort_index()时将正确排序。您还可以通过调用df2.index.min()和df2.index.min()

来获取df2的开头和结尾

如果时间戳是字符串,但您可以确定这些项目是有序的,您仍然可以使用.loc进行选择。否则,您将要将它们转换为datetime对象。

答案 1 :(得分:1)

如果需要添加df2.index需要combine_first

中缺少日期的所有行
df = df1.combine_first(df2)
print (df)
                     value
2014-05-21 09:00:00    0.0 <- value not exist in df1, used df2 value
2014-05-21 09:30:00    0.0
2014-05-21 10:00:00   10.0 <-value exist in both df, used df1 value
2014-05-21 10:30:00    3.0
2017-07-10 21:00:00    1.6
2017-07-10 22:00:00   32.1
2017-07-10 22:30:00   18.3
2017-07-10 23:00:00    7.6
2017-07-10 23:30:00    0.0