Заполнение отсутствующих значений даты (дня) 0 - PullRequest
2 голосов
/ 09 июля 2020

У меня есть фрейм данных:

     day  Datavalue
    2020-06-01   3.179695
    2020-06-02   0.132487
    2020-06-08   3.179695
    2020-06-09   3.179695
    2020-06-10   3.179695

Я хотел бы установить диапазон дат и добавить даты, которых нет в фрейме данных, как 0, например:

     day  Datavalue
    2020-06-01   3.179695
    2020-06-02   0.132487
    2020-06-03   0
    2020-06-04   0
    2020-06-05   0
    2020-06-06   0
    2020-06-07   0
    2020-06-08   3.179695
    2020-06-09   3.179695
    2020-06-10   3.179695

Я пробовал

      mydates = pd.period_range(date - timedelta(40), date + timedelta(40)
      x = data.set_index('day') 
      x = data.reindex(mydates, fill_value=0)


, но это просто устанавливает все нули

у

что я делаю не так?

спасибо

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Предполагая, что это должно быть сделано для всего DataFrame, используйте asfreq:

df.set_index('day').asfreq('1D', fill_value=0)

            Datavalue
day                  
2020-06-01   3.179695
2020-06-02   0.132487
2020-06-03   0.000000
2020-06-04   0.000000
2020-06-05   0.000000
2020-06-06   0.000000
2020-06-07   0.000000
2020-06-08   3.179695
2020-06-09   3.179695
2020-06-10   3.179695
1 голос
/ 09 июля 2020

Что-то вроде этого могло сработать:

delta = 2 # number of days before first value and after last value (as it seems to be needed from your code)

mydates = pd.period_range(df.date.iloc[0] - timedelta(delta), df.date.iloc[-1] + timedelta(delta))

# Change PeriodIndex object to datetime type:
mydates = mydates.to_timestamp() 

# Create dates dataframe and merge with original df containing values
dates_df = pd.DataFrame(mydates, columns=['date'])
new_df= pd.merge(df, dates_df, on='date', how='outer').sort_values('date').fillna(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...