Tytuł jest nieco mylący, ale zrobię co w mojej mocy, aby wyjaśnić mój problem tutaj. Mam 2 pandy dataframes, A i B:Porównywanie wartości z jednej ramki danych z wartościami z kolumn w innej ramce danych i uzyskiwanie danych z trzeciej kolumny
>> print a
id | value
1 | 250
2 | 150
3 | 350
4 | 550
5 | 450
>> print b
low | high | class
100 | 200 | 'A'
200 | 300 | 'B'
300 | 500 | 'A'
500 | 600 | 'C'
chcę utworzyć nową kolumnę o nazwie klasa w tabeli A, który zawiera klasę wartości zgodnie z tabelą B. Oto wynik chcę:
>> print a
id | value | class
1 | 250 | 'B'
2 | 150 | 'A'
3 | 350 | 'A'
4 | 550 | 'C'
5 | 450 | 'A'
Mam następujący kod napisany tego rodzaju robi to, co chcę:
a['class'] = pd.Series()
for i in range(len(a)):
val = a['value'][i]
cl = (b['class'][ (b['low'] <= val) \
(b['high'] >= val) ].iat[0])
a['class'].set_value(i,cl)
Problem ten jest szybki dla tabel długości 10 lub tak, ale ja Próbuję to zrobić przy stole o wielkości 100 000+ zarówno dla a, jak i dla b. Czy jest to szybszy sposób, używając jakiejś funkcji/atrybutu w pandach?
o wiele szybciej niż mój schemat pętli, jaki mam! również przetestuje to rozwiązanie! – rbae