Python 如何合并数据帧和日期范围系列?

Python 如何合并数据帧和日期范围系列?,python,pandas,Python,Pandas,我有一个包含用户事务的数据框: date amount 2019-11-25 100 2019-11-25 40 2019-11-23 44 2019-10-30 1000 日期列有空格。这使得时间序列图有点奇怪。为了填补空白,我创建了以下系列: allthosedays = pd.DataFrame({ 'date': pd.date_range( start = pd.Timestamp(df.date.min()),

我有一个包含用户事务的数据框:

date       amount
2019-11-25 100
2019-11-25 40
2019-11-23 44
2019-10-30 1000
日期列有空格。这使得时间序列图有点奇怪。为了填补空白,我创建了以下系列:

allthosedays = pd.DataFrame({
    'date': pd.date_range(
        start = pd.Timestamp(df.date.min()),                        
        end = pd.Timestamp(df.date.max()),
        freq = 'D'
    )
})
然后我被卡住了

如何合并数据帧和系列。并用零填充不存在的金额值

或者我做错了所有的事,问题解决了,却没有创造一个系列

这使得时间序列图有点奇怪

我认为一个原因是重复的
DatetimeIndex
2019-11-25
,所以这应该是个问题

一种可能的解决方案是使用
sum
每个日期时间对具有聚合的唯一值,例如
sum
,然后添加另一个值(如有必要),可以使用:



与左联接一起使用,替换缺少的值并最后转换为索引:

df3 = allthosedays.merge(df, how='left').fillna({'amount':0}).astype({'amount':int})
print (df3)
         date  amount
0  2019-10-30    1000
1  2019-10-31       0
2  2019-11-01       0
3  2019-11-02       0
4  2019-11-03       0
5  2019-11-04       0
6  2019-11-05       0
7  2019-11-06       0
8  2019-11-07       0
9  2019-11-08       0
10 2019-11-09       0
11 2019-11-10       0
12 2019-11-11       0
13 2019-11-12       0
14 2019-11-13       0
15 2019-11-14       0
16 2019-11-15       0
17 2019-11-16       0
18 2019-11-17       0
19 2019-11-18       0
20 2019-11-19       0
21 2019-11-20       0
22 2019-11-21       0
23 2019-11-22       0
24 2019-11-23      44
25 2019-11-24       0
26 2019-11-25     100
27 2019-11-25      40
df2 = df.set_index('date').sum(level=0).sort_index().asfreq('D', fill_value=0)
print (df2)
            amount
date              
2019-10-30    1000
2019-10-31       0
2019-11-01       0
2019-11-02       0
2019-11-03       0
2019-11-04       0
2019-11-05       0
2019-11-06       0
2019-11-07       0
2019-11-08       0
2019-11-09       0
2019-11-10       0
2019-11-11       0
2019-11-12       0
2019-11-13       0
2019-11-14       0
2019-11-15       0
2019-11-16       0
2019-11-17       0
2019-11-18       0
2019-11-19       0
2019-11-20       0
2019-11-21       0
2019-11-22       0
2019-11-23      44
2019-11-24       0
2019-11-25     140
df3 = allthosedays.merge(df, how='left').fillna({'amount':0}).astype({'amount':int})
print (df3)
         date  amount
0  2019-10-30    1000
1  2019-10-31       0
2  2019-11-01       0
3  2019-11-02       0
4  2019-11-03       0
5  2019-11-04       0
6  2019-11-05       0
7  2019-11-06       0
8  2019-11-07       0
9  2019-11-08       0
10 2019-11-09       0
11 2019-11-10       0
12 2019-11-11       0
13 2019-11-12       0
14 2019-11-13       0
15 2019-11-14       0
16 2019-11-15       0
17 2019-11-16       0
18 2019-11-17       0
19 2019-11-18       0
20 2019-11-19       0
21 2019-11-20       0
22 2019-11-21       0
23 2019-11-22       0
24 2019-11-23      44
25 2019-11-24       0
26 2019-11-25     100
27 2019-11-25      40