Tôi có hai khung dữ liệu Pandas, một khối khá lớn (30000+ hàng) và một hàng nhỏ hơn (100+ hàng).Các hàng phù hợp trong một khung dữ liệu Pandas đến một cột khác dựa trên ba cột
DFA trông giống như sau:
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 trông giống như sau:
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
... ... ... ...
Những gì tôi muốn làm là cho mỗi dòng trong DFB để tìm hàng trong DFA nơi các giá trị của các cột X VÀ Y bằng nhau VÀ đó là hàng đầu tiên mà giá trị của dfB ['TIME'] lớn hơn dfA ['ONSET_TIME'] và trả về giá trị của dfA ['COLOR'] cho hàng này.
dfA đại diện cho làm mới màn hình, trong đó X và Y là tọa độ của các mục trên màn hình và do đó lặp lại cho mỗi ONSET_TIME khác nhau (có 108 cặp tọa độ cho mỗi giá trị ONSET_TIME).
Sẽ có nhiều hàng trong đó X và Y trong hai khung dữ liệu bằng nhau, nhưng tôi cũng cần có một hàng phù hợp với thời gian.
Tôi đã làm điều này bằng cách sử dụng cho vòng lặp và nếu câu lệnh chỉ để thấy rằng nó có thể được thực hiện, nhưng rõ ràng cho kích thước của các khung dữ liệu này phải mất một thời gian rất dài.
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]
Đó là cảm ơn thực sự hữu ích, mặc dù tôi thấy rằng groupedDf cuối cùng của bạn đã thiếu một số giá trị từ DfB gốc. Tôi đã thử: filterDF.sort ('ONSET_TIME'). Groupby (['DfB_INDEX'], as_index = False) .max() Và điều đó mang lại cho tôi giá trị mà tôi đang tìm kiếm theo như tôi có thể nói. –