У меня есть pandas DataFrame, который выглядит примерно так:
product month
apple Jan-18
pear Jan-18
banana Jan-18
apple Jan-18
pear Feb-18
apple Feb-18
banana Feb-18
Я создал свою собственную таблицу ссылок, которая выглядит так:
id product start end weight
1 apple 01/01/2011 31/01/2018 heavy
1 apple 01/02/2018 31/12/2020 small
2 banana 01/01/2015 31/01/2018 heavy
2 banana 01/02/2018 31/12/2020 small
3 pear 01/01/2016 31/12/2020 heavy
Справочная таблица всегда начинается с первого и последнего дней месяца. Поле "вес" медленно меняется со временем. Например, яблоко и банан со временем менялись. Дата 31/12/2020 означает, что в настоящее время это активный размер продукта.
Мне нужно объединить "вес" в справочной таблице с моим DataFrame для продукта в зависимости от отметки времени. Мне нужно это сделать:
product month weight
apple Jan-18 heavy
pear Jan-18 heavy
banana Jan-18 heavy
apple Jan-18 heavy
pear Feb-18 heavy
apple Feb-18 small
banana Feb-18 small
Моя трудность заключается в том, что я не знаю, с чего начать. Поля даты в моей DataFrame и справочной таблице: datetime64 [ns]
Создайте новый столбец в ref_df, имеющий аналогичную структуру в виде столбца месяца ref_df
Объедините два кадра данных в только что созданной колонке
def month_conversion(x):
month_list = ['Jan','Feb','Mar','Apr','May','June','July','Aug','Sep','Oct','Nov','Dec']
return month_list[int(x.month)-1]
ref_df['year'] = ref_df['start'].head().map(lambda x: str(x.year)[-2:])
ref_df['month'] = ref_df.loc[0:5,'start'].map(month_conversion)
ref_df['common_key'] = ref_df['month'] +'-' +ref_df['year']
my_df['month'] = my_df['month'].astype(str)
final_df = ref_df.merge(my_df,left_on=['common_key','product'],right_index=['month','product'],suffixes=('_merge',''))