python-3.x - 为 Pandas 中的每个组填充缺失的日期和回填值
问题描述
我尝试year
从2015~2019
每个city
和s 中填写错过bfill
的value
s。
city year value
0 bj 2017 15
1 bj 2019 17
2 sh 2015 23
3 sh 2016 24
4 sh 2019 16
我怎样才能得到这样的预期结果?谢谢。
city year value
0 bj 2015 15
1 bj 2016 15
2 bj 2017 15
3 bj 2018 17
4 bj 2019 17
5 sh 2015 23
6 sh 2016 24
7 sh 2017 16
8 sh 2018 16
9 sh 2019 16
我尝试使用下面的代码来创建city
和year
配对:
rng = pd.date_range('2015', '2019', freq='YS').year
c = df['city'].unique()
mux = pd.MultiIndex.from_product([c, rng], names=['city','year'])
print(mux)
我得到:
MultiIndex([('bj', 2015),
('bj', 2016),
('bj', 2017),
('bj', 2018),
('bj', 2019),
('sh', 2015),
('sh', 2016),
('sh', 2017),
('sh', 2018),
('sh', 2019)],
names=['city', 'year'])
解决方案
在 DaatFrame 中使用DataFrame.reindex
by创建,然后由第一级使用:MultiIndex
DataFrame.set_index
GroupBy.bfill
city
df = df.set_index(['city','year']).reindex(mux).groupby(level=0).bfill().reset_index()
print (df)
city year value
0 bj 2015 15.0
1 bj 2016 15.0
2 bj 2017 15.0
3 bj 2018 17.0
4 bj 2019 17.0
5 sh 2015 23.0
6 sh 2016 24.0
7 sh 2017 16.0
8 sh 2018 16.0
9 sh 2019 16.0
推荐阅读
- php - 我如何用 laravel eloquent 编写这个查询
- filter - ODOO 10 如何根据发货作业线过滤发货订单?
- javascript - 将 ASP.NET MVC Web 应用程序从 http 转换为 https
- python - 如何拆分字符串并指定为熊猫数据框的列名?
- python - 是否可以对 python2 和 python3 使用相同的 pipenv?
- prestashop - Prestashop 管理面板访问问题
- jquery - 使用引导程序自定义上下文菜单位置
- mysql - Siteground 托管到 AWS RDS 连接花费了太多时间
- typescript - Typescript:可以使用枚举作为函数参数类型吗?
- java - 无法使用 selenium 在离子输入中找到 textarea 元素