1

我有一个(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

有没有一种自然的方法可以在熊猫中做到这一点?

4

1 回答 1

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
于 2013-10-24T06:18:04.947 回答