Учитывая ваши данные:
data_1 = {'Fruit': ['Apple', 'Apple', 'Apple', 'Apple', 'Orange', 'Orange', 'Orange', 'Orange'],
'CurrentDate': ['2018-08-29', '2018-08-30', '2018-08-31', '2018-09-01', '2018-08-29', '2018-08-30', '2018-08-31', '2018-09-01'],
'DailyFruitSpoilage': [-10, -20, -30, -40, -10, -20, -30, -40]}
data_2 = {'Fruit': ['Apple', 'Apple', 'Apple', 'Apple', 'Orange', 'Orange', 'Orange', 'Orange'],
'CurrentDate': ['2018-08-29', '2018-08-30', '2018-08-31', '2018-09-01', '2018-08-29', '2018-08-30', '2018-08-31', '2018-09-01'],
'DailyEndingInventory': [1000, 900, 870, 820, 1000, 900, 820, 750]}
df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
Приведите даты соответственно и создайте смещение даты:
df_1['CurrentDate'] = pd.PeriodIndex(df_1['CurrentDate'], freq='D')
df_1['Date'] = pd.PeriodIndex(df_1['CurrentDate'], freq='D')
df_2['Date'] = pd.PeriodIndex(df_2['CurrentDate'], freq='D')
df_2['Date'] += 1
Затем объедините data_frames с лагом:
df_3 = df_1.merge(df_2, on=['Date','Fruit'], suffixes=('','_lag'), how='right')
Рассчитать разницу в столбцах и затем сместить соответственно:
df_3['BeginningInventory'] = df_3['DailyFruitSpoilage'] + df_3['DailyEndingInventory']
df_3.BeginningInventory = df_3.BeginningInventory.shift(+1)
И вы возвращаете столбец BeginningInventory
так:
Index Fruit CurrentDate DailyFruitSpoilage Date CurrentDate_lag DailyEndingInventory BeginningInventory
0 Apple 2018-08-30 -20.0 2018-08-30 2018-08-29 1000 NaN
1 Apple 2018-08-31 -30.0 2018-08-31 2018-08-30 900 980.0
2 Apple 2018-09-01 -40.0 2018-09-01 2018-08-31 870 870.0
3 Orange 2018-08-30 -20.0 2018-08-30 2018-08-29 1000 830.0
4 Orange 2018-08-31 -30.0 2018-08-31 2018-08-30 900 980.0
5 Orange 2018-09-01 -40.0 2018-09-01 2018-08-31 820 870.0
6 Apple NaT NaN 2018-09-02 2018-09-01 820 780.0
7 Orange NaT NaN 2018-09-02 2018-09-01 750 NaN