我有一个编号列表,已将其分配为数据框序列,如下所示。
[0.0,
4.98,
10.68,
17.12,
23.56,
23.56,
23.56,
23.56,
50.82,
50.82,
50.82,
50.82,
50.82,
50.82,
50.82,
50.82,
50.82,
50.82,
117.84,
117.84,
117.84,
117.84,
117.84,
117.84,
117.84,
159.9,
159.9,
171.79,
171.79,
171.79,
190.28,
190.28,
204.07,
210.31,
215.97,
222.58]
我希望删除所有重复项,并根据列表中不是重复项的现有数字对缺失的NaN
值进行插值。
drop_duplicates
之后,这就是我所得到的。
0
0.00
1
4.98
2
10.68
3
17.12
4
23.56
8
50.82
18
117.84
25
159.90
27
171.79
30
190.28
32
204.07
33
210.31
34
215.97
35
222.58
我继续使用df.interpolate(method='linear')
,但是我得到了原来的数字列表,并且没有对缺失的值进行插值。有什么想法可以帮助您吗?我的代码示例如下:
dlist = [...]
df = pd.DataFrame(dlist)
df.drop_duplicates()
df.interpolate(method='linear')
非常感谢。
答案 0 :(得分:2)
尝试一下:
a = pd.Series(yourlist)
a[a.duplicated()] = None
a = a.interpolate(method='linear')
另一种解决方案:
用Series.duplicated
用Series.mask
将重复值替换为缺失值,并使用Series.interpolate
:
s = pd.Series(dlist)
s = s.mask(s.duplicated()).interpolate(method='linear')
print (s.head(10))
0 0.000
1 4.980
2 10.680
3 17.120
4 23.560
5 30.375
6 37.190
7 44.005
8 50.820
9 57.522
dtype: float64