大熊猫在日期重复行间隙

时间:2015-06-06 07:51:33

标签: python pandas

我有一个类似于下面的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
.
.

我对熊猫相对较新,而且我已经看到了一些类似的例子,但似乎无法让它们发挥作用。我想出了一个可能效率低下的解决方案,在那里我复制了日期字段,然后将其向上移动,并减去日期,然后按天数差异迭代 - 可能不是最好的。

任何想法/建议?

感谢。

1 个答案:

答案 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'作为重新采样的列仅适用于日期时间,如索引。