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
有关。
我已经做了一些搜索,看来这个错误与什么有关?索引?但我似乎无法使我的代码正常工作。我尝试了其他几个线程中的建议,但无济于事。
任何建议或其他考虑此问题的方法将不胜感激!!!!
谢谢
菜鸟
答案 0 :(得分:0)
问题在于arrival_time
是Series
:
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))