python - 一个df的时间戳在另一个df的2个时间戳之间
问题描述
我有以下2个df:
# -- create a df1
list_columns = ['time', 'code', 'age']
list_data = [
['2019-11-18 10:33:53', 'a1', 10],
['2019-11-18 11:33:56', 'a2', 15],
['2019-11-18 12:33:58', 'a4', 6],
['2019-11-18 13:45:04', 'a5', 3]
]
df1 = pd.DataFrame(columns=list_columns, data=list_data)
和
# -- create a df2
list_columns = ['start_time','end_time','name', 'country']
list_data = [
['2019-11-18 10:31:53','2019-11-18 10:35:53' ,'nick', 'germany'],
['2019-11-18 11:32:53','2019-11-18 11:35:53', 'joe', 'usa'],
['2019-11-18 12:33:58', '2019-11-18 12:35:58','smith', 'california'],
['2019-11-18 13:42:04','2019-11-18 13:47:04', 'sam', 'france']
]
df1 = pd.DataFrame(columns=list_columns, data=list_data)
df1.head()
不知道在熊猫中是否可能,但如果来自 df1 的时间介于 df2 的start_time和end_time之间,我想在 df1 中添加来自df2的列名称和国家/地区。一种连接。
对于日期,我会使用这样的掩码:
mask = (df1['time'] > df2s['start_time]) & (df1['time'] <= df2s['end_time])
df1 = df1.loc[mask]
但在这里我处理的是时间戳,我需要考虑 hh:mm。你能告诉我如何实现我的目标吗?
解决方案
您的start_time
和end_time
间隔似乎重叠。你期待多场比赛吗?您可以像这样进行交叉合并:
(df1.assign(tmp=1)
.merge(df2.assign(tmp=1), on='tmp', how='left')
.query('start_time <= time <= end_time')
.drop(['start_time', 'end_time'], axis=1)
)
输出:
time code age tmp name country
0 2019-11-18 10:33:53 a1 10 1 nick germany
5 2019-11-18 11:33:56 a2 15 1 joe usa
10 2019-11-18 12:33:58 a4 6 1 smith california
15 2019-11-18 13:45:04 a5 3 1 sam france
推荐阅读
- python - SciPy 的 fsolve 是否支持不同的求解器算法?
- wordpress - 我们可以使用 WC_Products_Query 来获取与所需产品名称匹配的产品吗?
- syntax - DLL 的静态链接(使用 *.lib)是否可能仅来自代码(不添加到项目,例如 #pragma link "...")?
- python - 从 1 到 20 亿的差为 6 的连续素数对的数量,例如 (23,29)
- python - 比较基于一列的两个数据帧,不同索引位置的值相等
- elasticsearch - Timelion 错误消息:[timelion_vis] > 错误:在单元格 #1 中:[search_phase_execution_exception]
- c# - 调用存储过程出现sql错误的问题
- qt - 如何在运行我的 QML 程序时持续运行 QProcess?
- android - 使用分页库 android 进行错误管理
- awk - 如果在表达式之前或之后设置,为什么字段分隔符的考虑不同?