【问题标题】:Pandas fillna bfill ffill based on what another column has in itPandas fillna bfill ffill 基于另一列中的内容
【发布时间】:2022-10-24 21:06:04
【问题描述】:

我可能会以错误的方式解决这个问题。我一直在我的 使用以下代码的其他列的数据框。

df['Example'] = df.groupby('Reference')['Example'].fillna(method='ffill')

这对于填补缺失的信息非常有效。但后来我跑了 解决无法填补缺失值的问题。这 我现在要解决的情况就是这样。所以我想填写 部门字段上的空白仅在 Beta 上,但我想填写它们 使用Description 为Outsource 的行中的Dept 值。我有 看过几个有条件的填充示例,但没有一个适用于 我的情况。编辑表格以尝试使其不那么混乱。 我之前没有完全正确地表达我的问题。我在看什么 for 是如果 press 字段包含 beta,那么它会查找该行 里面有外包。它使用外包部门来填补 该发票上具有相同工作的其他 nans#。但是填不上 任何其他南斯。

我的数据框:

Invoice Reference Press Description Dept
INV0001 Job#3045 Alpha Copies INV0001 Alpha
INV0002 Job#3055 Beta Design
INV0002 Job#3055 Beta Outsource Digital INV0002 Beta
Survey INV0002 Job#3056 Packaging
INV0002 Job#3056 Beta Mounting Brackets Sign
INV0002 Job#3056 Beta Installation Sign
INV0003 Job#3067 Delta Binding Bond INV0004 Beta
Survey INV0004 Job#3042 Outsource
INV0004 Job#3042 Beta Design
INV0005 Job#3058 Ceta Installation Sign

我希望它在 fillna 之后的样子:

Invoice Reference Press Description Dept
INV0001 Job#3045 Alpha Copies INV0001 Alpha
INV0002 Job#3055 Beta Design Digital
INV0002 Job#3055 Beta Outsource Digital INV0002 Beta
Survey Digital INV0002 Job#3056 Packaging
INV0002 Job#3056 Beta Mounting Brackets Sign
INV0002 Job#3056 Beta Installation Sign
INV0003 Job#3067 Delta Binding Bond INV0004 Beta
Survey Color INV0004 Job#3042 Outsource
INV0004 Job#3042 Beta Design Color
INV0005 Job#3058 Ceta Installation Sign

【问题讨论】:

    标签: pandas nan fillna


    【解决方案1】:
    df.groupby('Invoice').apply(lambda x:x.ffill().bfill())
    
        Invoice Press   Description Dept
    0   INV0001 Alpha   Something   NaN
    1   INV0002 Beta    Something   Digital
    2   INV0002 Beta    Outsource   Digital
    3   INV0002 Beta    Something   Digital
    4   INV0003 Delta   Something   Color
    5   INV0004 Beta    Something   Color
    6   INV0004 Beta    Outsource   Color
    7   INV0004 Beta    Something   Color
    8   INV0005 Ceta    Other       Sign
    

    【讨论】:

    • 如果我正确理解了要求,我认为这行不通。这将从非 NA 值填充 NA 值,即使该值不对应于“Department”==“Outsource”。
    • @NickODell OP 问题有点模棱两可。 OP 想要使用来自outsource 的值,但对于Invoice3,没有外包,但仍然所有内容都被Color 填满。你明白我的意思吗? OP也想填充Beta值,但输出显示所有内容(不一定是Beta)都已填充
    猜你喜欢
    • 2021-12-11
    • 2020-11-22
    • 2019-01-07
    • 2020-05-17
    • 2022-07-27
    • 2019-10-02
    • 1970-01-01
    • 2017-01-07
    • 2023-01-31
    相关资源
    最近更新 更多