Расширение набора данных временных рядов в python путем сравнения дат предыдущих строк и расширения интервала

У меня есть набор данных -

Id  Date        Amount

1   1-Mar-20    100

1   18-Apr-20   120

1   22-Jun-20   200

1   30-Jul-20   400

Ожидаемый результат:

Expanded Date          Id       Amount

1-Mar-20               1        100

2-Mar-20               1        100

3-Mar-20               1        100

4-Mar-20               1        100

5-Mar-20               1        100

6-Mar-20               1        100

7-Mar-20               1        100

8-Mar-20               1        100

.

.

18-Apr-20              1        120

19-Apr-20              1        120

и так далее...

Я уже пробовал -

newdf = pd.concat(
    [
        pd.DataFrame(
            {
                'Id':
                row.Id,
                'Date':
                pd.date_range(row.Date, row.Date.shift(-1), freq='D'),
                'Amount':
                row.Amount,
              
             
            },
            columns=['Id', 'Date', 'Amount'])
        for i, row in df.iterrows()
    ],
    ignore_index=True)

Но это дар 'str' object has no attribute 'shift'

Также я попытался выполнить повторную выборку данных-

df.asfreq(freq='D', method='ffill')

Но я получаю -

TypeError: '<' not supported between instances of 'Timestamp' and 'int'

Любые указатели на то, как расширить этот набор данных, сравнивая столбец «Дата» с фреймом данных, были бы полезны.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

asfreq работает с индексом, который в вашем случае является int, поэтому частота «D» не работает. Вы можете заставить свой пример работать, установив дату в качестве индекса:

>>> df = df.set_index(['Date'])
>>> filled = df.asfreq(freq='D', method='ffill')
>>> print(filled)
            Amount
Date              
2020-03-01     100
2020-03-02     100
2020-03-03     100
2020-03-04     100
2020-03-05     100
...            ...
2020-07-26     200
2020-07-27     200
2020-07-28     200
2020-07-29     200
2020-07-30     400

[152 rows x 1 columns]

Другие вопросы по теме