熊猫:如何通过平均相邻值来手动计算数据帧?

时间:2013-10-23 21:16:28

标签: python-2.7 pandas nan dataframe

我有一个(200列x 5000行)数据帧,偶尔它有一个缺失值。 我希望通过将单元格平均到右边来填充缺失值 和左边的单元格。

例如:

    A   B   C   D   E
1  34  54  56   0  78
2  12  87  78  23  12 
3  78  35   0  72  31
4  84  25  14  56   0
5  26  82  13  14  34

在此数据框中,有三个缺失值:

1) D1
2) C3
3) E4

D1 should be (78 + 56)/2 = 67
C3 should be (72 + 32)/2 = 55
E4 should be (26 + 56)/2 = 41

因此得到的数据框应为:

    A   B   C   D   E
1  34  54  56  67  78
2  12  87  78  23  12 
3  78  35  55  72  31
4  84  25  14  56  41
5  26  82  13  14  34

在熊猫中有自然的方法吗?

1 个答案:

答案 0 :(得分:2)

我认为新的interpolate()方法可以做到这一点,我试图像这样手动执行此操作:

df = pd.DataFrame({"A":[34,12,78,84,26], "B":[54,87,35,25,82], "C":[56,78,0,14,13], "D":[0,23,72,56,14], "E":[78,12,31,0,34]})

# get flat array from DataFrame
a = np.array(df).flatten()

# get flat array, zeroes replaced with left + right / 2
res = np.where(a == 0, (np.roll(a, 1) + np.roll(a, -1)) / 2, a) 

# convert back to DataFrame
df_new = pd.DataFrame(res.reshape(df.shape), columns = df.columns)

#     A   B   C   D   E
# 0  34  54  56  67  78
# 1  12  87  78  23  12
# 2  78  35  53  72  31
# 3  84  25  14  56  41
# 4  26  82  13  14  34