python - 使用 Python 3.x 在 Pandas 中使用零和常量值扩展/填充时间序列数据
问题描述
我在扩展时间序列数据时遇到问题。我有以下数据框:
date_first = df1['date'].min() # is 2016-08-08
date_last = df1['date'].max() # is 2016-08-20
>>> df1
date customer qty
149481 2016-08-08 A 400
161933 2016-08-10 A 200
167172 2016-08-13 B 900
170296 2016-08-15 A 300
178221 2016-08-20 B 150
现在我正在重新索引框架并获得以下框架:
df1.set_index('date', inplace=True)
>>> df1
customer qty
date
2016-08-08 A 400
2016-08-10 A 200
2016-08-13 B 900
2016-08-15 A 300
2016-08-20 B 150
现在我正在尝试将每个客户的时间序列数据扩展到最早日期和最晚日期,如下所示:
ix = pd.DataFrame({on_column: pd.Series([date_first, date_last]), 'qty': 0})
result = df1.reindex(ix)
这并没有给我我的预期结果,我希望它看起来像下面的框架:
>>> df1
date customer qty
0 2016-08-08 A 400
1 2016-08-08 B 0
2 2016-08-09 A 0
3 2016-08-09 B 0
4 2016-08-10 A 200
5 2016-08-10 B 0
...
24 2016-08-20 A 0
25 2016-08-20 B 150
解决方案
由两列创建MultiIndex.from_product
的reindex
原始文件使用:MultiIndex
set_index
date_first = df1['date'].min()
date_last = df1['date'].max()
mux = pd.MultiIndex.from_product([pd.date_range(date_first, date_last, freq='d'),
df1['customer'].unique()], names=['date','customer'])
print (mux)
result = df1.set_index(['date', 'customer']).reindex(mux, fill_value=0).reset_index()
print (result)
date customer qty
0 2016-08-08 A 400
1 2016-08-08 B 0
2 2016-08-09 A 0
3 2016-08-09 B 0
4 2016-08-10 A 200
5 2016-08-10 B 0
6 2016-08-11 A 0
7 2016-08-11 B 0
8 2016-08-12 A 0
9 2016-08-12 B 0
10 2016-08-13 A 0
11 2016-08-13 B 900
12 2016-08-14 A 0
13 2016-08-14 B 0
14 2016-08-15 A 300
15 2016-08-15 B 0
16 2016-08-16 A 0
17 2016-08-16 B 0
18 2016-08-17 A 0
19 2016-08-17 B 0
20 2016-08-18 A 0
21 2016-08-18 B 0
22 2016-08-19 A 0
23 2016-08-19 B 0
24 2016-08-20 A 0
25 2016-08-20 B 150
推荐阅读
- svelte - 在 Svelte 组件中单击焦点切换
- ios - Int Variable 不允许我从 UI 文本字段中添加数据
- python - 根据条件将值插入数据框列
- swift - 带有字符串和 UIImages 的 Swift Codable 协议
- c++ - WINAPI 事件对象意外行为
- asp.net-mvc - 即使我可以看到它在浏览器中进行检查,图像也不会显示
- python - Python - 从字典中更改原始数据框对象?
- sql - 屏蔽列时从表中选择
- python - ecdsa 签名密钥格式
- python - 如何将 Keras MNIST 数据集与我自己的 MNIST 图像结合起来?