python-3.x - 如何连接列时间值在一定范围内且不是日期时间或时间戳对象的两个数据框?
问题描述
我有两个数据框,如下所示:
time browncarbon blackcarbon
181.7335 0.105270 NaN
181.3809 0.166545 0.001217
181.6197 0.071581 NaN
422 rows x 3 columns
start end toc
179.9989 180.0002 155.0
180.0002 180.0016 152.0
180.0016 180.0030 151.0
1364 rows x 3 columns
第一个数据帧有一个时间列,每四分钟有一个瞬间。第二个数据帧有两个时间列,每两分钟间隔一次。这两个时间列不会同时开始和结束。但是,它们包含在同一天收集的数据。我怎样才能制作另一个包含以下内容的数据框:
time browncarbon blackcarbon toc
422 rows X 4 columns
但是,Stack Overflow 上有一个相关的答案,它仅适用于时间列是日期时间或时间戳对象的情况。链接是:如何连接列值在一定范围内的两个数据框?
附录1:封装到时间行之一的多个开始行和结束行也应该对应一个目录行,就像现在一样,但是,它应该是多个目录行的平均值,事实并非如此目前。
附录 2:合并两个条件复杂的 pandas 数据框
解决方案
我们创建一个人工键列来outer merge
获取笛卡尔积(行之间的所有匹配项)。然后我们过滤所有时间在 范围内的行.query
。
注意:我编辑了一行的值,因此我们可以获得匹配项(请参阅底部示例数据框中的第 0 行)
df1.assign(key=1).merge(df2.assign(key=1), on='key', how='outer')\
.query('(time >= start) & (time <= end)')\
.drop(['key', 'start', 'end'], axis=1)
输出
time browncarbon blackcarbon toc
1 180.0008 0.10527 NaN 152.0
使用的示例数据框:
df1
:
time browncarbon blackcarbon
0 180.0008 0.105270 NaN
1 181.3809 0.166545 0.001217
2 181.6197 0.071581 NaN
df2
:
start end toc
0 179.9989 180.0002 155.0
1 180.0002 180.0016 152.0
2 180.0016 180.0030 151.0
推荐阅读
- pyspark - PySpark - 迭代数据框的行
- android - 如何禁用标签主机上的默认焦点突出显示?
- machine-learning - 分类编码器缺少级别
- android - Toast maketext 消息中的图像图标
- android - 如何在共享首选项中保存 Java 对象
- sql - 每 1000 行提交一次
- python - sklearn 中 learning_curve 函数中估计器参数的值应该是多少?
- javascript - jQuery 返回 UNDEFINED 或 ON 作为输入值
- c++ - C++ AES Decrypt 和 Nodejs AES Decrypt 产生不同的输出
- android - 通过URL从json解析后如何将数据离线存储在android数据库中?