如何计算两个日期/时间之间的实例数

时间:2019-04-26 00:42:30

标签: python python-3.x pandas dataframe

Noobie在这里,所以请多多包涵。我会尽量简化。

我有两个数据框:

df2:每个人,到达者到我们商店的时间,离开者离开我们商店的时间的唯一visit number组成

df1:是visit numbers的{​​{1}}的子集(以及不在df2中的其他数据)。

df2中的每个visit number都位于df1中,但事实并非如此。

我需要做的是: 对于df2中的每个visit number,确定来自df1的人员到达时共有多少人。

我对这个问题的思考方式如下(我在下面提供了一些代码): 1.遍历df1 2.从df1中取出visit ID 3.将此df1应用于visit ID以获取该人的到达时间 4.使用该到达时间创建一个df2 5.将mask应用于mask,然后仅计算行数

df2

但是,当我运行这段代码时,我得到一个错误:

for index, row in df1.iterrows():
    visit_id = row['ID_number']
    df2row = df2[(df2['ID_number'] == visit_id
    arrival_time = df2row['Arrival_Date/Time']
    mask = (df2['Arrv Date/Time'] < arrival_time) & (df2['Disch 
    Date/Time'] > arrival_time)
    total_customers = len(df2.loc(mask))

这与我创建的ValueError: Can only compare identically-labeled Series objects 有关。

我已经做了一些搜索,看来这个错误与什么有关?索引?但我似乎无法使我的代码正常工作。我尝试了其他几个线程中的建议,但无济于事。

任何建议或其他考虑此问题的方法将不胜感激!!!!

谢谢

菜鸟

1 个答案:

答案 0 :(得分:0)

问题在于arrival_timeSeries

1    1
Name: Arrival_Date/Time, dtype: int64

假设df2row是唯一的,则可以使用.iloc提取值。最后一行还有一个问题...您应该使用iloc[]而不是iloc(),或者按照@bubble的建议,使用mask.sum()

for index, row in df1.iterrows():
    visit_id = row['ID_number']
    df2row = df2[(df2['ID_number'] == visit_id)]
    arrival_time = df2row['Arrival_Date/Time'].iloc[0]
    mask = (df2['Arrival_Date/Time'] < arrival_time) & (df2['Disch Date/Time'] > arrival_time)
    total_customers = len(df2.loc(mask))