为了账号安全,请及时绑定邮箱和手机立即绑定

如何创建月份的期间范围并用零填充?

如何创建月份的期间范围并用零填充?

江户川乱折腾 2023-03-22 16:29:17
假设我有一个数据框,其中包含每个月发生的某些事件。数据只有几个月和几年的事件以及每个月发生的事件数量。df = pd.DataFrame({'month':['2018-01', '2018-02', '2018-04','2018-05','2018-06',                             '2018-07', '2018-10','2018-11', '2019-01', '2019-02',                            '2019-03', '2019-05','2019-07', '2019-11', '2019-12'],                  'counts':[10,5,6,1,2,5,7,8,9,1,10,12,8,10,4]})df    month  counts0   2018-01 101   2018-02 52   2018-04 63   2018-05 14   2018-06 25   2018-07 56   2018-10 77   2018-11 88   2019-01 99   2019-02 110  2019-03 1011  2019-05 1212  2019-07 1013  2019-11 1014  2019-12 4正如您在上面注意到的,2018 年 1 月到 2019 年 12 月之间有一个时间范围,但并非所有月份都有计数值。比如2018年3月(2018-03)就没有数据,中间有很多月份缺失。我想把这个缺失的月份填入零,所以基本上我想按{'month':'2018-03', count:0}正确的顺序插入。我还想对所有缺失的月份和应该存在的值做同样的事情。我所做的如下。我将月份转换为适当的格式。df['month'] = pd.to_datetime(df['month']).dt.to_period('M')上面的代码工作正常。然后我尝试以每月频率创建一个日期范围,但这不起作用。idx = pd.date_range(min(df['month']), max(df['month']), freq='M)错误说ValueError: Cannot convert Period to Timestamp unambiguously. Use to_timestamp我该怎么办?谢谢。
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

使用period_range,然后将句点列转换为PeriodIndex并使用DataFrame.reindex

df['month'] = pd.to_datetime(df['month']).dt.to_period('M')

idx = pd.period_range(df['month'].min(), df['month'].max(), freq='M')

df = df.set_index('month').reindex(idx, fill_value=0)

print (df)

         counts

2018-01      10

2018-02       5

2018-03       0

2018-04       6

2018-05       1

2018-06       2

2018-07       5

2018-08       0

2018-09       0

2018-10       7

2018-11       8

2018-12       0

2019-01       9

2019-02       1

2019-03      10

2019-04       0

2019-05      12

2019-06       0

2019-07       8

2019-08       0

2019-09       0

2019-10       0

2019-11      10

2019-12       4


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号