如果该元素为0 - Pandas DataFrame,则查找该列中上下元素的平均值

时间:2016-01-09 18:47:25

标签: python pandas

我想使用来自另一个数据帧的相同值创建新数据帧,除非有0值。如果有一个0值,我想找到之前和之后的平均值。

例如:

df =  A  B  C
      5  2  1
      3  4  5
      2  1  0
      6  8  7

我希望结果看起来像下面的df:

df_new = A  B  C
         5  2  1
         3  4  5
         2  1  6
         6  8  7

1 个答案:

答案 0 :(得分:1)

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[5, 3, 2, 6], 'B':[2, 4, 1, 8], 'C':[1, 5, 0, 7]})

Nrows = len(df)

def run(col):
        originalValues = list(df[col])
        values = list(np.where(np.array(list(df[col])) == 0)[0])
        indices2replace = filter(lambda x: x > 0 and x < Nrows, values)
        for index in indices2replace:
                originalValues[index] = 0.5 * (originalValues[index+1] + originalValues[index-1])
        return originalValues


newDF = pd.DataFrame(map(lambda x: run(x) , df.columns)).transpose()