python - 熊猫填充日期+多列
问题描述
假设我有以下数据
date id1 id2 category value
01/01/2019 1000 2000 income 1.0
01/01/2019 1000 2010 income 1.0
01/01/2019 1000 2000 expense 1.0
01/01/2019 1000 2010 expense 1.0
01/02/2019 1000 2000 income 2.0
01/02/2019 1000 2010 income 2.0
01/02/2019 1000 2000 expense 2.0
01/02/2019 1000 2010 expense 2.0
01/04/2019 1000 2000 income 3.0
01/04/2019 1000 2010 income 3.0
01/04/2019 1000 2000 expense 3.0
01/04/2019 1000 2010 expense 3.0
我想填写缺失的日期 01/03/2019,但还要为 id1、id2 和类别的每个组合填写一行。所以在我的情况下,将添加 4 行:
date id1 id2 category value
01/03/2019 1000 2000 income 2.0
01/03/2019 1000 2010 income 2.0
01/03/2019 1000 2000 expense 2.0
01/03/2019 1000 2010 expense 2.0
当这是唯一的索引时,我熟悉回填和转发填充日期,但是上述通过多列值组合回填的特殊问题给我带来了麻烦。有没有想过使用 pandas 的简单方法?
解决方案
这是一个枢纽问题 1st ,然后变成一个resample
和ffill
问题
df.date=pd.to_datetime(df.date)
df['key']=df.groupby('date').cumcount()
newdf=df.set_index(['date','key']).unstack().resample('D').mean().ffill().stack().reset_index(level=0)
newdf
date id1 id2 value
key
0 2019-01-01 1000.0 2000.0 1.0
1 2019-01-01 1000.0 2010.0 1.0
2 2019-01-01 1000.0 2000.0 1.0
3 2019-01-01 1000.0 2010.0 1.0
0 2019-01-02 1000.0 2000.0 2.0
1 2019-01-02 1000.0 2010.0 2.0
2 2019-01-02 1000.0 2000.0 2.0
3 2019-01-02 1000.0 2010.0 2.0
0 2019-01-03 1000.0 2000.0 2.0
1 2019-01-03 1000.0 2010.0 2.0
2 2019-01-03 1000.0 2000.0 2.0
3 2019-01-03 1000.0 2010.0 2.0
0 2019-01-04 1000.0 2000.0 3.0
1 2019-01-04 1000.0 2010.0 3.0
2 2019-01-04 1000.0 2000.0 3.0
3 2019-01-04 1000.0 2010.0 3.0
推荐阅读
- java - 在 Spring Controller 中捕获无效参数
- rust - 如何为 UnixStream 和 TcpStream 创建多态类型
- postgresql - 不明确的列引用 - 它可以引用 PL/pgSQL 变量或表列?
- raspberry-pi - GPSD 没有看到完整的数据
- reactjs - 如何在 Azure 上部署 NextJs SSR React 应用程序
- javascript - JavaScript modal 只会在第一次打开后关闭,但不会在第二次打开后关闭
- paypal - PayPal webhook 状态从“待处理”变为成功需要发生什么?
- python - 滚动您自己的自定义容器 docker 映像:如何为本地系统 GPU 创建用户定义的命令
- c# - 使用 C# 和 SQL 解决 datagridview 中重复条目的最佳方法是什么?
- python - 混淆Python中的属性或方法