我有一个数据框,其中有两列包含日期范围。你知道吗
原始数据如下所示:
df1:
personid, visitto, intime, outtime
8, 8, 2017-07-01 06:00:00, 2017-07-01 08:00:00
17 8, 2017-07-02 09:00:00, 2017-07-02 10:00:00
df2:
location, open, close
8, 2017-07-01 04:00:00, 2017-07-01 13:00:00
以下是我迄今为止所做的: 1合并visito上的两个数据帧->;location
merged_df:
personid, visitto, intime, outtime, location, open, close
8, 8, 2017-07-01 06:00:00, 2017-07-01 08:00:00, 8, 2017-07-01 04:00:00, 2017-07-01 13:00:00
17 8, 2017-07-02 09:00:00, 2017-07-02 10:00:00, 8, 2017-07-01 04:00:00, 2017-07-01 13:00:00
personid, visitto, visittime, opentime
8, 8, [2017-07-01 06:00:00, 2017-07-01 08:00:00], [2017-07-01 04:00:00, 2017-07-01 13:00:00]
17 8, [2017-07-02 09:00:00, 2017-07-02 10:00:00], [2017-07-01 04:00:00, 2017-07-01 13:00:00]
我现在想过滤这个合并的间隔数据帧,只返回日期时间重叠的行。我的预期结果是:
personid, visitto, visittime, opentime
8, 8, [2017-07-01 06:00:00, 2017-07-01 08:00:00], [2017-07-01 04:00:00, 2017-07-01 13:00:00]
使用iterrows()并逐行比较重叠,我成功地获得了所需的结果,但是,这非常冗长。我更喜欢这样做(非工作示例):
merged_df.loc[merged_df['visittime'].overlaps(merged_df['opentime'])]
或者,在数据帧合并期间完成此操作。类似于(不起作用的例子):
merge_df = pd.merge(df1[["personid", "visitto", "intime", "outtime"]], df2[["location", "open", "close"]], how='inner', left_on='visitto', right_on='location') #WHERE intime, outtime OVERLAPS open, close
是否可以从函数而不是循环执行此操作?这可以很容易地从数据库中的Sql中完成,但是,我正在努力找到一种有效的方法来在dataframe上执行此操作。你知道吗
虽然它基本上仍然是一个循环,但它确实实现了这一点。你知道吗
如果您可以将
IntervalIndex
用于您的熊猫:使用内置的pandas
datetime
功能(加上来自here的答案),而不是创建复合对象列(比如list
),您将总是需要迭代这些列:结果:
相关问题 更多 >
编程相关推荐