python - 在事件的边界时间合并两个数据框
问题描述
两个数据框df1
和(见下文)提供有关有时df2
测量参数的实验的信息。在测量期间,根据某些(不是所有)时间的事件将 a 设置为 True 或 False 。事件之间标志保留其值。val
t
flag
t
如何加入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
解决方案
方法来自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
推荐阅读
- java - 仅从 editText 检测和更改“hello”文本 font-family
- php - 如何在 PHP 中包含用字符串标记的文件?
- java - 不完整的类型:
无法转换为组件 - flutter - Flutter:未处理的异常:“String”类型不是“bool”类型的子类型
- typescript - “字符串”类型的索引签名只允许读取
- javascript - 使用 PHP 和 JavaScript 以模态显示表格数据
- python - 没有使用 python 抓取从 HTML 获取数据
- interop - 有什么东西阻碍了现代语言和 COBOL 之间的互操作性吗?
- microsoft-teams - 团队 - 图形 API - 无法使用已定义的组织者/指定频道创建活动
- javascript - 如何在 time-phaser3 创建一枚硬币