У меня есть набор данных -
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'
Любые указатели на то, как расширить этот набор данных, сравнивая столбец «Дата» с фреймом данных, были бы полезны.
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]