如何解决如何将丢失的时间序列数据行添加到 python 中的熊猫数据帧
我有下面给出的产品时间序列数据集:
date product price amount
11/17/2019 A 10 20
11/19/2019 A 15 20
11/24/2019 A 20 30
12/01/2019 C 40 50
12/05/2019 C 45 35
此数据在每个产品的数据开始日期和结束日期之间缺少天数(“MM/dd/YYYY”)。我正在尝试用零行填充缺失的日期并将上一个表转换为下面给出的表:
date product price amount
11/17/2019 A 10 20
11/18/2019 A 0 0
11/19/2019 A 15 20
11/20/2019 A 0 0
11/21/2019 A 0 0
11/22/2019 A 0 0
11/23/2019 A 0 0
11/24/2019 A 20 30
12/01/2019 C 40 50
12/02/2019 C 0 0
12/03/2019 C 0 0
12/04/2019 C 0 0
12/05/2019 C 45 35
为了得到这个转换,我使用了代码:
import pandas as pd
import numpy as np
data=pd.read_csv("test.txt",sep="\t",parse_dates=['date'])
data=data.set_index(["date","product"])
start=data.first_valid_index()[0]
end=data.last_valid_index()[0]
df=data.set_index("date").reindex(pd.date_range(start,end,freq="1D"),fill_values=0)
解决方法
如果需要为每个 0
缺少的日期时间添加 product
,请分别使用 GroupBy.apply
中的自定义函数和 DataFrame.reindex
最小和最大日期时间:
df = pd.read_csv("test.txt",sep="\t",parse_dates=['date'])
f = lambda x: x.reindex(pd.date_range(x.index.min(),x.index.max(),name='date'),fill_value=0)
df = (df.set_index('date')
.groupby('product')
.apply(f)
.drop('product',axis=1)
.reset_index())
print (df)
product date price amount
0 A 2019-11-17 10 20
1 A 2019-11-18 0 0
2 A 2019-11-19 15 20
3 A 2019-11-20 0 0
4 A 2019-11-21 0 0
5 A 2019-11-22 0 0
6 A 2019-11-23 0 0
7 A 2019-11-24 20 30
8 C 2019-12-01 40 50
9 C 2019-12-02 0 0
10 C 2019-12-03 0 0
11 C 2019-12-04 0 0
12 C 2019-12-05 45 35
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。