Python 比较2个大小不均匀的数据帧的匹配值并组合在一起,然后用最接近的数据替换NaN值

Python 比较2个大小不均匀的数据帧的匹配值并组合在一起,然后用最接近的数据替换NaN值,python,pandas,dataframe,Python,Pandas,Dataframe,我不熟悉python和Stackoverflow。我在处理数据方面有问题。我有两组大小不同的数据。df1的大小为1000,df2的大小为100000。以下是df1和df2的示例 df1= Date x y 0 2020-01-01 01:01 1.1 2.4 1 2020-01-01 01:05 4.2 5.5 2 2020-01-01 01:08 7.3 8.6

我不熟悉python和Stackoverflow。我在处理数据方面有问题。我有两组大小不同的数据。df1的大小为1000,df2的大小为100000。以下是df1和df2的示例

df1=
        Date                 x     y   
    0   2020-01-01 01:01    1.1   2.4 
    1   2020-01-01 01:05    4.2   5.5  
    2   2020-01-01 01:08    7.3   8.6  

 

df2=
        Date                 x     y
    0   2020-01-01 01:00    NaN   NaN
    1   2020-01-01 01:01    NaN   NaN
    2   2020-01-01 01:02    NaN   NaN
    3   2020-01-01 01:03    NaN   NaN
    4   2020-01-01 01:04    NaN   NaN
    5   2020-01-01 01:05    NaN   NaN
    6   2020-01-01 01:06    NaN   NaN
    7   2020-01-01 01:07    NaN   NaN 
    8   2020-01-01 01:08    NaN   NaN
    9   2020-01-01 01:09    NaN   NaN
   10   2020-01-01 01:10    NaN   NaN
 
我想做的是将它们组合成一个新的数据帧,如果
df1['Date']=df2['Date']
,df3将显示如下

df3= 
        Date                 x     y
    0   2020-01-01 01:00    NaN   NaN     
    1   2020-01-01 01:01    1.1   2.4 
    2   2020-01-01 01:02    NaN   NaN
    3   2020-01-01 01:03    NaN   NaN
    4   2020-01-01 01:04    NaN   NaN
    5   2020-01-01 01:05    4.2   5.5  
    6   2020-01-01 01:06    NaN   NaN
    7   2020-01-01 01:07    NaN   NaN 
    8   2020-01-01 01:08    7.3   8.6  
    9   2020-01-01 01:09    NaN   NaN
   10   2020-01-01 01:10    NaN   NaN 
然后,NaN值将等于上面最接近的值

df3=
        Date                 x     y
    0   2020-01-01 01:00    NaN   NaN     
    1   2020-01-01 01:01    1.1   2.4 
    2   2020-01-01 01:02    1.1   2.4 
    3   2020-01-01 01:03    1.1   2.4 
    4   2020-01-01 01:04    1.1   2.4 
    5   2020-01-01 01:05    4.2   5.5  
    6   2020-01-01 01:06    4.2   5.5  
    7   2020-01-01 01:07    4.2   5.5  
    8   2020-01-01 01:08    7.3   8.6  
    9   2020-01-01 01:09    7.3   8.6  
   10   2020-01-01 01:10    7.3   8.6 
太多了

一种方法是在完整的df上使用(假设它包括所有索引)。然后使用
fillna
获取所有缺失的先前值:

a=pd.DataFrame(
{
“日期”:pd.日期范围(start=“2020-01-01”,期间=3),
“x”:[1,np.nan,3],
“y”:[5,np.nan,6],
}
).设置索引(“日期”)
b=pd.DataFrame(
{
“日期”:pd.日期范围(start=“2020-01-01”,期间=5),
“x”:[np.nan]*5,
“y”:[np.nan]*5,
}
).设置索引(“日期”)
印刷品(a、b)
b.更新(a)
b=b.fillna(方法=“ffill”)
印刷品(b)

欢迎来到堆栈溢出。祝贺你第一次发帖。你试过什么?将您的代码和任何错误/输出添加到您的问题中,这将帮助其他人找到您问题的解决方案。阅读以下内容可能会对您有所帮助:。我不明白为什么
2020-09-01 01:08中的
df1
2020-01-01:08中的
df2
相匹配?很抱歉输入错误。所有日期均为2020-01-01。我已经重新编辑了问题STHX,请发表评论!将尝试tmr,看看这是否适合我
| date                |   x |   y |
|:--------------------|----:|----:|
| 2020-01-01 00:00:00 |   1 |   5 |
| 2020-01-02 00:00:00 | nan | nan |
| 2020-01-03 00:00:00 |   3 |   6 |


| date                |   x |   y |
|:--------------------|----:|----:|
| 2020-01-01 00:00:00 | nan | nan |
| 2020-01-02 00:00:00 | nan | nan |
| 2020-01-03 00:00:00 | nan | nan |
| 2020-01-04 00:00:00 | nan | nan |
| 2020-01-05 00:00:00 | nan | nan |
| date                |   x |   y |
|:--------------------|----:|----:|
| 2020-01-01 00:00:00 |   1 |   5 |
| 2020-01-02 00:00:00 |   1 |   5 |
| 2020-01-03 00:00:00 |   3 |   6 |
| 2020-01-04 00:00:00 |   3 |   6 |
| 2020-01-05 00:00:00 |   3 |   6 |