我有两个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['set_TIME']的第一行,并返回该行的dfA['COLOUR']的值。
dfA表示显示器的刷新,其中X和Y是显示器上项目的坐标,因此在每个不同的起始时间重复它们自己(起始时间的每个值有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]
可能有一种更有效的方法可以做到这一点,但这里有一种方法没有那些慢for循环:
基本思想是合并两个表,这样就可以将时间放在一个表中。然后我过滤了最大的rec(最接近dfB上的时间)。如果你对此有疑问请告诉我。
使用
merge()
-它的工作方式与SQL中的JOIN
类似-您已经完成了第一部分。结果:
然后你可以用它来过滤结果。
结果:
相关问题 更多 >
编程相关推荐