我有一个看起来像这样的数据框
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
考虑到我需要能够在以后对添加的值执行检查,我不能简单地添加它们。我需要验证它们不存在并复制各种剩余变量,这些变量将被插值。这些都需要空洞。
我的想法是在所有现有行之间创建一个空行,并简单地向后和向前填充。从而确保没有复制其他信息。 我不知道怎么做。
最好是我会跳过空行的介绍并一次完成整个过程。 但我对如何开始这个
的想法更少答案 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
然后,您可以使用fillna
,interpolate
等