У меня есть df с данными о запасах, и я хотел бы ввести отрицательные и положительные целые числа (с указанием дней) до и после target_date - согласно ниже:
Что у меня есть (дата указатель):
date symbol open high low close volume
12/9/1988 AAPL 1.4018 1.4107 1.3839 1.3975 11239200
12/12/1988 AAPL 1.4018 1.4107 1.375 1.375 29470000
12/13/1988 AAPL 1.375 1.3839 1.3661 1.3839 30637600
12/14/1988 AAPL 1.375 1.4286 1.375 1.4196 48325200
12/15/1988 AAPL 1.4286 1.4464 1.4018 1.4107 28142800
12/16/1988 AAPL 1.4107 1.4464 1.4018 1.4332 45872400
12/19/1988 AAPL 1.4375 1.4643 1.4286 1.4554 58581600
12/20/1988 AAPL 1.4643 1.4821 1.4511 1.4643 68546800
12/21/1988 AAPL 1.4643 1.5 1.4643 1.4911 60491200
12/22/1988 AAPL 1.4911 1.5 1.4554 1.4643 26507600
12/23/1988 AAPL 1.4643 1.4779 1.4643 1.4689 10239600
12/27/1988 AAPL 1.4643 1.4821 1.4464 1.4464 14996800
12/28/1988 AAPL 1.4464 1.4554 1.4196 1.4375 12885600
Ниже приведено представление о том, что я хотел бы получить, когда target_date: 16.12.1988:
- создать столбец с именем "день"
- на целевую дату (например, 16.12.1988) - введите «0» в столбце «день»
- в столбце «день» - перед целевой датой введите -1 до -n (длина df до даты)
- в столбце «день» - после целевой даты введите от 1 до n (длина df после даты)
date day symbol open high low close volume
12/9/1988 -5 AAPL 1.4018 1.4107 1.3839 1.3975 11239200
12/12/1988 -4 AAPL 1.4018 1.4107 1.375 1.375 29470000
12/13/1988 -3 AAPL 1.375 1.3839 1.3661 1.3839 30637600
12/14/1988 -2 AAPL 1.375 1.4286 1.375 1.4196 48325200
12/15/1988 -1 AAPL 1.4286 1.4464 1.4018 1.4107 28142800
12/16/1988 0 AAPL 1.4107 1.4464 1.4018 1.4332 45872400
12/19/1988 1 AAPL 1.4375 1.4643 1.4286 1.4554 58581600
12/20/1988 2 AAPL 1.4643 1.4821 1.4511 1.4643 68546800
12/21/1988 3 AAPL 1.4643 1.5 1.4643 1.4911 60491200
12/22/1988 4 AAPL 1.4911 1.5 1.4554 1.4643 26507600
12/23/1988 5 AAPL 1.4643 1.4779 1.4643 1.4689 10239600
12/27/1988 6 AAPL 1.4643 1.4821 1.4464 1.4464 14996800
12/28/1988 7 AAPL 1.4464 1.4554 1.4196 1.4375 12885600
Я рассмотрел следующий подход (найден в SO, но не могу найти источник):
lenDF = (int(len(df) / 2))
df.insert(0, 'day', range(-lenDF, -lenDF + len(df)))
Это не совсем подходит для моих целей до того, как длина df до целевой даты может отличаться от целевой даты. Он не совпадает с '0' в столбце "день" с датой target_date.
Я также пытался усечь df до и после целевой даты - но та же проблема, что и в предыдущем решении - он не соответствует '0' в столбце "день" с target_date.
df_before_target = df.truncate(before=target_date)
df_after_target = df.truncate(after=target_date)
len_b4 = len(df_before_target ) - 1 # substracting 1 to account for double counting of target_date in the truncated dfs.
len_a4 = len(df_after_target )
df.insert(0, 'day', range(-len_b4, -len_a4 + len(df)))
Спасибо за любую помощь.