微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将丢失的时间序列数据行添加到 python 中的熊猫数据帧

如何解决如何将丢失的时间序列数据行添加到 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 举报,一经查实,本站将立刻删除。