首页 > 解决方案 > 如何通过查找其他行来替换 DataFrame 中的空值

问题描述

请考虑以下DataFrame代码

from datetime import datetime
import pandas as pd

lookup = pd.DataFrame([
    ['IJK', '009', None],
    ['DEF', None, 'CM002'],
    ['GHI', '003', 'CM003'],
    ['GHI', None, 'CM004'],
], columns=['Key', 'Lookup1', 'Lookup2'])

我的问题是关于在列中有键GHI的行。我想找到一种简单的方法,用003具有相同键列的另一行的同一列中的给定值替换空值(无)

所以,我希望从这种情况入手:

|   | Key | Lookup1 | Lookup2 |
|---|-----|---------|---------|
| 0 | IJK | 009     | None    |
| 1 | DEF | None    | CM002   |
| 2 | GHI | None    | CM003   |
| 3 | GHI | 003     | CM004   |

并到达这种情况

|   | Key | Lookup1 | Lookup2 |
|---|-----|---------|---------|
| 0 | IJK | 009     | None    |
| 1 | DEF | None    | CM002   |
| 2 | GHI | 003     | CM003   |
| 3 | GHI | 003     | CM004   |

编辑:

标签: pythonpandas

解决方案


以这种方式尝试:

lookup.groupby("Key")[["Key","Lookup1","Lookup2"]].fillna(method='ffill')

输出:

    Key  Lookup1  Lookup2
0   IJK  009     None
1   DEF  None    CM002
2   GHI  003     CM003
3   GHI  003     CM004

编辑

在这种情况下:

lookup = pd.DataFrame([
    ['IJK', '009', None],
    ['DEF', None, 'CM002'],
    ['GHI', None, 'CM004'],
    ['GHI', '003', 'CM003'],
    ["ABC",'001',"CM002"],
    ["ABC",None,"CM005"]
], columns=['Key', 'Lookup1', 'Lookup2'])

您可以填写两个方向:

lookup.groupby("Key")[["Key","Lookup1","Lookup2"]].fillna(method='ffill').groupby("Key")[["Key","Lookup1","Lookup2"]].fillna(method='bfill')

输出:

    Key Lookup1 Lookup2
0   IJK 009     None
1   DEF None    CM002
2   GHI 003     CM004
3   GHI 003     CM003
4   ABC 001     CM002
5   ABC 001     CM005

推荐阅读