我有一张桌子
df = pd.DataFrame([1,np.nan,3,1,np.nan,3,50,np.nan,52], index=[7, 8, 9, 7, 12, 27, 7, 8, 9])
:
index values
7 1
8 NaN
9 3
7 1
12 NaN
27 3
7 50
8 NaN
9 52
行已正确排序。但是,这里的索引没有顺序,并且在设计上有重复项。
如何在此处按比例按比例插入值(method =“ index”)?
如果我尝试使用索引进行插值,由于重复的索引,导致Series混乱:
df.interpolate(method='index')
:
index values desired actual
7 1 1 1
8 NaN 2 2
9 3 3 3
7 1 1 1
12 NaN 1.5 52 <-- wat
27 3 3 3
7 50 50 50
8 NaN 51 1.1 <-- wat
9 52 52 52
如果不可复制:熊猫0.23.3,numpy:1.14.5,Python:3.6.5
答案 0 :(得分:3)
尝试根据索引添加对数据框的分组:
df.groupby(df.index.to_series().diff().lt(0).cumsum())\
.apply(lambda x: x.interpolate(method='index'))
输出:
0
7 1.0
8 2.0
9 3.0
7 1.0
12 1.5
27 3.0
7 50.0
8 51.0
9 52.0
答案 1 :(得分:2)
如果您遇到我在scott的评论中上面提到的情况
np.where(df['values'].isnull(),df['values'].shift()+(df['values'].shift(-1)-df['values'].shift())*(df['index']-df['index'].shift())/(df['index'].shift(-1)-df['index'].shift()),df['values'])
Out[219]: array([ 1. , 2. , 3. , 1. , 1.5, 3. , 50. , 51. , 52. ])
这是检查每个空值在两个有效值之间的距离,并用索引(不同)的距离填充该值。
公差:两个值之间只有一个缺失值