我有一个类似于下面的pandas数据框(我现在用CSV格式,因为它在我的计算机上工作):
UNITID,COMPETITORID,COMPETORNAME,PRICE,DATECHANGE 123,555,xyz 1, 2.33,3/3/2013 123,555,xyz 1, 2.34,3/5/2013 123,555,xyz 1, 2.24,3/15/2013 123,666,xyz 2, 4.24,2/15/2013 123,666,xyz 2, 4.44,3/15/2013 123,666,xyz 2, 1.44,3/25/2013 223,777,xyz 3, 2.44,3/25/2013 223,777,xyz 3, 2.54,3/28/2013 223,777,xyz 3, 1.54,3/29/2013
我试图填补日期中的空白,例如:
123,555,xyz 1, 2.33,3/3/2013 123,555,xyz 1, 2.33,3/4/2013 123,555,xyz 1, 2.34,3/5/2013 123,555,xyz 1, 2.34,3/6/2013 123,555,xyz 1, 2.34,3/7/2013 123,555,xyz 1, 2.34,3/8/2013 . .
我对熊猫相对较新,而且我已经看到了一些类似的例子,但似乎无法让它们发挥作用。我想出了一个可能效率低下的解决方案,在那里我复制了日期字段,然后将其向上移动,并减去日期,然后按天数差异迭代 - 可能不是最好的。
任何想法/建议?
感谢。
答案 0 :(得分:0)
我已加载csv并解析“DATECHANGE”'列到日期时间,然后set_index
到此列,调用resample
并传递参数'fill_method=ffill'
以执行每日重新采样,然后reset_index
。:
In [2]:
# load the data
t="""UNITID,COMPETITORID,COMPETORNAME,PRICE,DATECHANGE
123,555,xyz 1, 2.33,3/3/2013
123,555,xyz 1, 2.34,3/5/2013
123,555,xyz 1, 2.24,3/15/2013
123,666,xyz 2, 4.24,2/15/2013
123,666,xyz 2, 4.44,3/15/2013
123,666,xyz 2, 1.44,3/25/2013
223,777,xyz 3, 2.44,3/25/2013
223,777,xyz 3, 2.54,3/28/2013
223,777,xyz 3, 1.54,3/29/2013"""
df=pd.read_csv(io.StringIO(t), parse_dates=['DATECHANGE'])
In [7]:
df.set_index('DATECHANGE').resample('D', fill_method='ffill').reset_index()
Out[7]:
DATECHANGE UNITID COMPETITORID PRICE
0 2013-02-15 123 666.0 4.24
1 2013-02-16 123 666.0 4.24
2 2013-02-17 123 666.0 4.24
3 2013-02-18 123 666.0 4.24
4 2013-02-19 123 666.0 4.24
5 2013-02-20 123 666.0 4.24
6 2013-02-21 123 666.0 4.24
7 2013-02-22 123 666.0 4.24
8 2013-02-23 123 666.0 4.24
9 2013-02-24 123 666.0 4.24
10 2013-02-25 123 666.0 4.24
11 2013-02-26 123 666.0 4.24
12 2013-02-27 123 666.0 4.24
13 2013-02-28 123 666.0 4.24
14 2013-03-01 123 666.0 4.24
15 2013-03-02 123 666.0 4.24
16 2013-03-03 123 555.0 2.33
17 2013-03-04 123 555.0 2.33
18 2013-03-05 123 555.0 2.34
19 2013-03-06 123 555.0 2.34
20 2013-03-07 123 555.0 2.34
21 2013-03-08 123 555.0 2.34
22 2013-03-09 123 555.0 2.34
23 2013-03-10 123 555.0 2.34
24 2013-03-11 123 555.0 2.34
25 2013-03-12 123 555.0 2.34
26 2013-03-13 123 555.0 2.34
27 2013-03-14 123 555.0 2.34
28 2013-03-15 123 610.5 3.34
29 2013-03-16 123 610.5 3.34
30 2013-03-17 123 610.5 3.34
31 2013-03-18 123 610.5 3.34
32 2013-03-19 123 610.5 3.34
33 2013-03-20 123 610.5 3.34
34 2013-03-21 123 610.5 3.34
35 2013-03-22 123 610.5 3.34
36 2013-03-23 123 610.5 3.34
37 2013-03-24 123 610.5 3.34
38 2013-03-25 173 721.5 1.94
39 2013-03-26 173 721.5 1.94
40 2013-03-27 173 721.5 1.94
41 2013-03-28 223 777.0 2.54
42 2013-03-29 223 777.0 1.54
您必须暂时将索引设置为' DATECHANGE'作为重新采样的列仅适用于日期时间,如索引。