首页 > 解决方案 > 在事件的边界时间合并两个数据框

问题描述

两个数据框df1和(见下文)提供有关有时df2测量参数的实验的信息。在测量期间,根据某些(不是所有)时间的事件将 a 设置为 True 或 False 。事件之间标志保留其值。valtflagt

如何加入df1并加入df2一个result具有flag每个测量值的列?

df1 = pd.DataFrame({'t':[0.5,1.3,2.1,3.3,4.0,5.6,6.1,7.9,8.3,9.0], 
   'val':['a0','b1','c2','d3','e4','j5','k6','l7','m8', 'n9']})
df2 = pd.DataFrame({'t':[0,2,3,5,7,8], 'flag':[False,True,False,True,False,True]})

# df1
   t val
0  0.5  a0
1  1.3  b1
2  2.1  c2
3  3.3  d3
4  4.0  e4
5  5.6  j5
6  6.1  k6
7  7.9  l7
8  8.3  m8
9  9.0  n9 

# df2
   t   flag
0  0  False
1  2   True
2  3  False
3  5   True
4  7  False
5  8   True

需要得到这个结果:

result = pd.DataFrame({'t':[0.5,1.3,2.1,3.3,4.0,5.6,6.1,7.9,8.3,9.0], 
                   'val':['a0','b1','c1','d3','e4','j5','k6','l7','m8','n9'],
                   'flag':[False,False,True,False,False,True,True,False,True,True]
                  })
# result:

    t   val flag
0   0.5 a0  False
1   1.3 b1  False
2   2.1 c1  True
3   3.3 d3  False
4   4.0 e4  False
5   5.6 j5  True
6   6.1 k6  True
7   7.9 l7  False
8   8.3 m8  True
9   9.0 n9  True

标签: pythonpandasmerge

解决方案


方法来自reindex

df1['New']=df2.set_index('t').reindex(df1.t,method='ffill').values
df1
     t val    New
0  0.5  a0  False
1  1.3  b1  False
2  2.1  c2   True
3  3.3  d3  False
4  4.0  e4  False
5  5.6  j5   True
6  6.1  k6   True
7  7.9  l7  False
8  8.3  m8   True
9  9.0  n9   True

推荐阅读