python - 按键用先前或后续值填充缺失值

标签 python pandas replace missing-data

我有这个 pandas 数据框: 将 pandas 导入为 pd 将 numpy 导入为 np

ds1 = {'col1':[1,1,1,1,1,1,1, 2,2,2,2,2,2,2], "col2" : [1,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,3]}

df1 = pd.DataFrame(data=ds1)
print(df1)

    col1  col2
0      1   1.0
1      1   NaN
2      1   NaN
3      1   NaN
4      1   NaN
5      1   NaN
6      1   NaN
7      2   NaN
8      2   NaN
9      2   NaN
10     2   NaN
11     2   NaN
12     2   NaN
13     2   3.0

对于 col1 的相同值,我需要使用 col1 中存在的非缺失值来填充 col2 的缺失值。

在这种情况下,生成的数据框将如下所示:

    col1  col2
0      1   1.0
1      1   1.0
2      1   1.0
3      1   1.0
4      1   1.0
5      1   1.0
6      1   1.0
7      2   3.0
8      2   3.0
9      2   3.0
10     2   3.0
11     2   3.0
12     2   3.0
13     2   3.0

有人知道如何用Python实现吗?

最佳答案

有几种方法可以做到这一点。使用 groupby 的更简单方法和 transform如果每组只有一个非空值并且您希望将其作为所有 NaN 的填充值,则有效:

df1.groupby('col1')['col2'].transform('first')

0     1.0
1     1.0
2     1.0
3     1.0
4     1.0
5     1.0
6     1.0
7     3.0
8     3.0
9     3.0
10    3.0
11    3.0
12    3.0
13    3.0
Name: col2, dtype: float64

df1['col2'] = df1.groupby('col1')['col2'].transform('first')

或者,groupby 和每个组的前向填充/回填。

(df1.groupby('col1', as_index=False, group_keys=False)['col2']
    .apply(lambda c: c.ffill().bfill()))

0     1.0
1     1.0
2     1.0
3     1.0
4     1.0
5     1.0
6     1.0
7     3.0
8     3.0
9     3.0
10    3.0
11    3.0
12    3.0
13    3.0
Name: col2, dtype: float64

如果您的数据如下所示,我建议您使用此选项:1、NaN、NaN、2、NaN、NaN、3、NaN、NaN。因为这些填充仅根据最后一个非空值回填缺失值。

如果您有前导 NaN,则尾随的 bfill 调用非常有用。

关于python - 按键用先前或后续值填充缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76122411/

相关文章:

Perl 搜索和替换目录中所有文件的脚本

mysql - 替换功能不起作用

python - 想要使用 python swiftclient 将 sqlite.db 文件上传到 swift 容器并且总是得到 utf-8 错误

python - subprocess.communicate() 在写入输入后是否关闭标准输入?

python - 属性错误: 'float' object has no attribute 'iloc'

python - 如何从 Python 中并排绘制多个饼图?

python - 如何使用 python pandas 数据框找到正则表达式匹配的开始和结束?

Javascript 将部分字符串替换为变量

Python Pandas 将一行添加到多索引数据帧

python - 正则表达式返回除复合表达式之外的所有内容