我想使用来自另一个数据帧的相同值创建新数据帧,除非有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
答案 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()