объединение 2-х фреймов данных на основе ближайшего значения в python - PullRequest
2 голосов
/ 27 марта 2020

после всех данных очистки я дошел до этой точки. Может ли кто-нибудь помочь мне, пожалуйста, чтобы завершить sh его?

У меня есть 2 кадра данных, которые после всех очистки и объединения должны быть объединены друг с другом в конце!

df1:
PriceDate   tenor   ccy
3/07/2019   6   USD_AED

df2:
PriceDate   Term_By_Day     Ccy   rate
1/07/2019   7            USD_AED    2.34
2/07/2019   7            USD_AED    3.45
4/07/2019   7            USD_AED    4.89

, поэтому моя цель состоит в том, чтобы объединить эти 2 фрейма данных на основе точного "Ccy" и ближайшего "тарифа" и ближайшего "тенора с Term_by_day".

so the ideal output will be :   
PriceDate   tenor    ccy       rate
3/07/2019   6     USD_AED      whatever it should be 

Мне кажется, я должен использовать интерполяцию с методом = ближайший ????? но я так растерялся сейчас!

Не могли бы вы дать мне какой-нибудь совет, если я на правильном пути и если интерполяция - лучший способ сделать это?

ура,

Z

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете найти ближайшие PriceDate в df2 для всех строк в df1 следующим образом:

nearest_rates = []
for row in df1.itertuples(index=False):
    nearest_index = df2.set_index('PriceDate').index.get_loc(row.PriceDate, method='nearest')
    nearest_rate  = df2.iloc[nearest_index]['rate']
    nearest_rates.append(nearest_rate)
df1['rate'] = nearest_rates

Для вашего примера это найдет nearest_index = 2 (из-за nearest method) с помощью nearest_rate = 4.89 и добавьте это к df1.

Мне не совсем понятно, нужен ли вам объединенный фрейм данных или вы хотите включить ближайшие значения из df2 в df1. Для фактического объединения / слияния двух источников существует несколько методов , и вам придется определить ваши конкретные c условия (имена столбцов, например, Ccy против ccy; обработка возможных дубликатов и т. Д. * 1021) *.).

...