如何在pandas df

时间:2018-02-26 06:34:40

标签: python pandas loops

如何在索引之间以均匀的值分布有效地返回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在整个数据集中随机分布。它们也会波动到大于或小于之前的数字。

0 个答案:

没有答案