【发布时间】:2014-07-14 23:00:59
【问题描述】:
我有两个 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]
【问题讨论】: