我有两个Pandas数据帧,一个相当大(30000+行),另一个要小得多(100+行)。
dfA看起来像这样:
X Y ONSET_TIME COLOUR
0 104 78 1083 6
1 172 78 1083 16
2 240 78 1083 15
3 308 78 1083 8
4 376 78 1083 8
5 444 78 1083 14
6 512 78 1083 14
... ... ... ... ...
dfB的样子大致是这样的:
TIME X Y
0 7 512 350
1 1722 512 214
2 1906 376 214
3 2095 376 146
4 2234 308 78
5 2406 172 146
... ... ... ...
对于dfB中的每一行,我想要找到在dfA中X和Y列的值相等并且是dfB['TIME']大于dfA['ONSET_TIME']的第一行,并返回此行dfA['COLOUR']的值。dfA表示显示器的刷新,其中X和Y是显示器上物品的坐标,并且为每个不同的ONSET_TIME重复自己(每个ONSET_TIME有108个坐标对)。
在两个数据框中,将有多行X和Y相等,但我需要匹配时间的那一行。
我已经使用for循环和if语句完成了这项工作,只是为了看看它是否能够完成,但显然,考虑到数据框的大小,这需要非常长的时间。
for s in range(0, len(dfA)):
for r in range(0, len(dfB)):
if (dfB.iloc[r,1] == dfA.iloc[s,0]) and (dfB.iloc[r,2] == dfA.iloc[s,1]) and (dfA.iloc[s,2] <= dfB.iloc[r,0] < dfA.iloc[s+108,2]):
return dfA.iloc[s,3]