【发布时间】:2016-08-21 15:54:25
【问题描述】:
使用.fillna找到了解决方案
如你所料,我的标题已经很混乱了,我也是! 我有一个这样的数据框
Index Values
0 NaN
1 NaN
...................
230 350.21
231 350.71
...................
1605 922.24
在 230 和 1605 之间我有值,但前 229 个条目没有。所以我计算了斜率以近似丢失的数据并将其存储在“斜率”中。
Y1 = df['Values'].min()
X1ID = df['Values'].idxmin()
Y2 = df['Values'].max()
X2ID = df['Values'].idxmax()
slope = (Y2 - Y1)/(X2ID - X1ID)
本质上,我想从 Values 中获取 .min,减去斜率并将新值插入到前一个 .min 之前的索引中。但是,我完全迷失了,我尝试了这样的事情:
df['Values2'] = df['Values'].min().apply(lambda x: x.min() - slope)
但这显然是垃圾。我将不胜感激一些建议
编辑
所以在尝试了多种方法后,我找到了一个至少对我有用的粗略解决方案。
loopcounter = 0
missingValue = []
missingindex = []
missingindex.append(loopcounter)
missingValue.append(Y1)
for minValue in missingValue:
minValue = minValue-slopeave
missingValue.append(minwavelength)
loopcounter +=1
missingindex.append(loopcounter)
if loopcounter == 230:
break
del missingValue[0]
missingValue.reverse()
del missingindex[-1]
首先我创建了两个列表,一个用于缺失值,另一个用于索引。 之后我将我的最小值 (Y1) 添加到列表中并开始我的循环。 我希望循环在 230 次后停止(缺失值的数量) 每个循环都会从列表中的项目中减去斜率,从最小值开始,同时将计数器添加到缺失索引列表中。
删除第一个值并颠倒顺序将列表转换为正确的顺序。
missValue = dict(zip(missingindex,missingValue))
然后我将这两个列表组合成一个字典
df['Values'] = df['Values'].fillna(missValue)
之后我使用 .fillna 函数用字典填充我的数据框。
这对我有用,我知道它可能不是最优雅的解决方案...
我要感谢所有投入时间帮助我的人,非常感谢。
【问题讨论】: