如何在索引之间以均匀的值分布有效地返回nan's
?我已经通过切片手动完成了这个操作,但是当你有1000次调用时,这会变得非常低效。
通过所需的输入/输出,这个问题可能比文本更容易理解。
下面显示的示例df
始终包含随机nan's
:
df = pd.DataFrame(np.random.randn(10, 2),
index=[1,2,3,4,5,6,7,8,9,10],
columns=['one', 'two'])
df = df.mask(np.random.random(df.shape) < .5)
ix = [(row, col) for row in range(df.shape[0]) for col in range(df.shape[1])]
for row, col in random.sample(ix, int(round(.1*len(ix)))):
df.iat[row, col] = np.nan
虽然函数是随机的,但它会产生类似的东西:
one two
1 NaN NaN
2 0.823711 -1.581639
3 NaN -1.632728
4 2.267315 -1.213950
5 NaN -0.779525
6 NaN NaN
7 NaN -1.817710
8 0.190799 NaN
9 NaN NaN
10 NaN NaN
如果我们考虑column one
,我想将值插入到行3,5,6,7,9中。我可以通过切片列和行手动完成此操作。因此,如果我想找到索引3,我会添加2.267315和0.823711并除以3.这是一个简单的,因为它只是平均值。哪个等于1.545513。但是,我有一些纳米分布在多个指数上,例如5,6,7。如果我想找到5,6,7,我会减去2.267315和0.19079并除以4。
所以预期的输出是:
one two
1 NaN NaN
2 0.823711 -1.581639
3 1.545513 -1.632728
4 2.267315 -1.213950
5 1.748247 -0.779525
6 1.229057 -1.298525
7 0.709928 -1.817710
8 0.190799 NaN
9 NaN NaN
10 NaN NaN
我开始通过在每个适当的行之间切片来手动执行此操作。除此之外,我考虑了一个循环,但每次计算都会有所不同,因为nan在整个数据集中随机分布。它们也会波动到大于或小于之前的数字。