我有一个Pandas 数据框,如下所示:
df1
site_id date hour reach maid
0 16002 2023-09-02 21 NaN 33f9fad6-20c5-426c-962f-bc2fbb82aecb
1 16002 2023-09-04 17 NaN 33f9fad6-20c5-426c-962f-bc2fbb82aecb
2 16002 2023-09-04 19 NaN 4a676aeb-6f6f-4622-934b-59b8f149aad7
3 16002 2023-09-04 17 NaN 35363191-c6aa-49fb-beb1-04a98898bed2
4 16002 2023-09-03 22 NaN a44beb20-a90a-4135-be18-6dda71eeb7c2
我已经根据上面的数据帧创建了另一个数据帧,它提供了每[site_id,date,hour]
个组合的记录计数.T
df2
site_id date hour count
1666 37226 2023-09-02 8 4586
1676 37226 2023-09-03 16 3586
639 36972 2023-09-03 21 235
640 36972 2023-09-03 22 5431
641 36972 2023-09-03 23 343
我想筛选第一个数据帧,并获得第二个数据帧的count
列中给出的确切记录数.例如,我想从与site_id 37226, date 2023-09-02 and hour 8
匹配的第一个数据帧中获取4586
条记录.
我try 在第二个数据帧上使用forloop,如下所示:
for index,rows in k3.iterrows():
sid=rows['site_id']
dt=rows['date']
hr=rows['hour']
cnt=rows['count']
kdf1=dff[(dff['site_id'] == sid) & (dff['date']==dt) & (dff['hour']==hr)]
kdf2=kdf1[:cnt]
这很管用--但见效非常慢.有没有更快的方法来获得子集.我还附上两个样本数据帧的链接: