没有数据存在时的插值

时间:2016-02-19 16:38:02

标签: python pandas

我有一个看起来像这样的数据框

     Idnumber   Parent  Date             Other variables
      1         a       2005             x
      1         a       2007             x
      2         b       2005             x
      2         b       2006             x
      2         b       2007             x

我需要它看起来像这样:

     Idnumber   Parent   Date          Other variables           
      1         a       2005             x          
      1         NaN     2006             NaN          
      1         a       2007             x         
      2         b       2005             x
      2         b       2006             x
      2         b       2007             x

考虑到我需要能够在以后对添加的值执行检查,我不能简单地添加它们。我需要验证它们不存在并复制各种剩余变量,这些变量将被插值。这些都需要空洞。

我的想法是在所有现有行之间创建一个空行,并简单地向后和向前填充。从而确保没有复制其他信息。 我不知道怎么做。

最好是我会跳过空行的介绍并一次完成整个过程。 但我对如何开始这个

的想法更少

1 个答案:

答案 0 :(得分:1)

对于整体方法,您可以先定义应该存在哪些行,然后与原始数据集合并。

>>> orig

   Idnumber Parent  Date Other
0         1      a  2005     x
1         1      a  2007     x
2         2      b  2005     x
3         2      b  2006     x
4         2      b  2007     x

现在使用itertools.product来定义应该存在的所有行。 (您也可以使用pd.MultiIndex.from_product。)

>>> import itertools
>>> df = pd.DataFrame(list(itertools.product(orig['Idnumber'].unique(),
                                             orig['Date'].unique())))
>>> df.columns = ['Idnumber','Date']

   Idnumber  Date
0         1  2005
1         1  2006
2         1  2007
3         2  2005
4         2  2006
5         2  2007

然后与原始数据合并:

>>> df.merge(orig,how='outer',on=['Idnumber','Date'])

   Idnumber  Date Parent Other
0         1  2005      a     x
1         1  2006    NaN   NaN
2         1  2007      a     x
3         2  2005      b     x
4         2  2006      b     x
5         2  2007      b     x

然后,您可以使用fillnainterpolate