У меня есть две таблицы в пандах. Один из них составляет около 10, 000+ строк, которые выглядят следующим образом:
Таблица 1
col_1 date state ratio [50 more cols]
A 10/12 NY .5
A 12/05 MA NaN
.........
У меня есть другая таблица, в которой около 10 строк выглядят следующим образом:
Таблица 2
date state ratio
12/05 MA .9
12/03 MA .8
............
Мне нужно установить соотношение в таблице 1 на основе значений даты и состояния из таблицы 2. Идеальным решением было бы слияние по дате и состоянию, но это создает два столбца: ratio_x и ratio_y
Мне нужен способ установить отношение в таблице 1 к соответствующему соотношению в таблице 2, где совпадают дата и состояния. Соотношения в таблице 1 могут быть перезаписаны.
Если это можно сделать правильно, слияние, то это тоже работает.
Изменить: вы можете рассматривать таблицу 2 как предназначенную для отображения определенных значений состояния (так что все состояния в таблице 2 являются MA в этом примере)
Сначала создайте ряд сопоставлений из df2
:
s = df2.set_index(['date', 'state'])['ratio']
Затем подайте на df1
:
df1['ratio'] = df1.set_index(['date', 'state']).index.map(s.get)\
.fillna(df1['ratio'])
Приоритет отдается отношениям в df2
.
Вам нужно будет выбрать, какое значение ratio
принять первым. Предполагая, что коэффициенты из таблицы 2 имеют преимущество:
# join in ratio from the other table
table1 = table1.join(table2.set_index(["date", "state"])["ratio"].to_frame("ratio2"), on=["date", "state"])
# take ratio2 first, then the existing ratio value if ratio2 is null
table1["ratio"] = table1["ratio2"].fillna(table1["ratio"])
# delete the ratio2 column
del table1["ratio2"]