【问题标题】:Pandas: How do I make a dataframe manually calculate missing values by averaging adjacent values?Pandas:如何通过平均相邻值来手动计算缺失值?
【发布时间】:2013-11-02 08:45:33
【问题描述】:

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

在 pandas 中是否有一种自然的方法可以做到这一点?

【问题讨论】:

标签: python-2.7 pandas nan dataframe


【解决方案1】:

我认为新的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2019-08-10
    相关资源
    最近更新 更多