Я хочу объединить два индекса данных конкретных кадров в соответствии с картой (dictionary
), которую я создал. Какой эффективный способ сделать это?
Данные:
df = pd.DataFrame({"a":[10, 34, 24, 40, 56, 44],
"b":[95, 63, 74, 85, 56, 43]})
print(df)
a b
0 10 95
1 34 63
2 24 74
3 40 85
4 56 56
5 44 43
df1 = pd.DataFrame({"c":[1, 2, 3, 4],
"d":[5, 6, 7, 8]})
print(df1)
c d
0 1 5
1 2 6
2 3 7
3 4 8
d = {
(1,0):0.67,
(1,2):0.9,
(2,1):0.2,
(2,3):0.34
(4,0):0.7,
(4,2):0.5
}
Желаемый результат:
a b c d ratio
0 34 63 1 5 0.67
1 34 63 3 7 0.9
...
5 56 56 3 7 0.5
Я могу добиться этого, но это занимает много времени, так как карта моих исходных фреймов данных содержит около 4,7 млн строк. Я хотел бы знать, есть ли способ MERGE
, JOIN
или CONCAT
этих фреймов данных по различным индексам.
Мой подход:
matched_rows = []
for key in d.keys():
s = df.iloc[key[0]].tolist() + df1.iloc[key[1]].tolist() + [d[key]]
matched_rows.append(s)
df_matched = pd.DataFrame(matched_rows, columns = df.columns.tolist() + df1.columns.tolist() + ['ratio']
Буду очень признателен за вашу помощь. Заранее большое спасибо.