代码之家  ›  专栏  ›  技术社区  ›  ytu

如果其他列中的值相同,则向前或向后填充NAS

  •  2
  • ytu  · 技术社区  · 7 年前

    举个例子:

    import pandas as pd
    df = pd.DataFrame({
        "date": ["20180724", "20180725", "20180731", "20180723", "20180731"],
        "identity": [None, "A123456789", None, None, None],
        "hid": [12345, 12345, 12345, 54321, 54321],
        "hospital": ["A", "A", "A", "B", "B"],
        "result": [70, None, 100, 90, 78]
    })
    

    因为前三排是一样的 hid hospital 中的值 identity 也应该是相同的。至于其他两行,它们是一样的 隐藏 医院 还有,但不知道 身份 提供了,因此 身份 应保持缺失。换句话说,期望的输出是:

           date    identity    hid hospital  result
    0  20180724  A123456789  12345        A    70.0
    1  20180725  A123456789  12345        A     NaN
    2  20180731  A123456789  12345        A   100.0
    3  20180723        None  54321        B    90.0
    4  20180731        None  54321        B    78.0
    

    我可以循环查看 隐藏 S和 医院 类的 for hid, hospital in df[["hid", "hospital"]].drop_duplicates().itertuples(index=False) 但我不知道下一步该怎么做。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Shaido MadHadders    7 年前

    使用 groupby apply ffill bfill :

    df['identity'] = df.groupby(['hid', 'hospital'])['identity'].apply(lambda x: x.ffill().bfill())
    

    这将使南人充满信心 向后,同时分离指定组的值。

    推荐文章