我有一个(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
在熊猫中有自然的方法吗?
答案 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