【问题标题】:How to apply condition on ffill?如何对填充应用条件?
【发布时间】:2020-08-12 18:34:25
【问题描述】:

我想知道如何在 C_01_01_ActionPlan 和 C_01_03_StatusValue 上使用 ffill,条件是如果 C_01_03_StatusValue 上的单元格值为 None 并且如果上一个单元格 =“In Progress”,则从两个列中复制上一个单元格文本

这是一个文本视图

Report_Due_Date         C_01_03_StatusValue C_02_01_ActionPlan
1/1/2020                None                None
2/1/2020                Supplier network    In Progress
3/1/2020                Supplier network    In Progress
4/1/2020                Installation        In Progress
5/1/2020                None                None
6/1/2020                Telematics tool.    In Progress
7/1/2020                None                None
8/1/2020                None                None

当前

预期:

if df[df['C_01_03_StatusValue']] is None and df['C_01_03_StatusValue'].shift()=='In Progress':
      df['C_01_03_StatusValue'] = df['C_01_03_StatusValue'].ffill()

【问题讨论】:

  • 另外,添加您尝试过的内容,请参阅How do I ask a good question?
  • 您确实应该以文本而不是图像的形式提供示例。我在您的示例中没有看到任何与标准功能 df.fillna(method="ffill") 不同的地方
  • 感谢大家的评论,@RobRaymond 列 C_01_03_StatusValue 不会总是“进行中”,这就是我需要条件的原因
  • @VatsalPatel 如果您使用可用的数据展示您想要实现的目标,而无需像我这样的人使用 OCR,这将非常有帮助

标签: python pandas numpy dataframe


【解决方案1】:

您可以尝试使用df.fillna(method='ffill'),因为它有助于向前填充数据并且可能有用

【讨论】:

    【解决方案2】:

    我能看到的唯一方法是将fillna() 回滚到不想要的状态。使用loc[mask] 类型的方法也不起作用。

    import re
    data = """Report_Due_Date         C_01_03_StatusValue  C_02_01_ActionPlan
    1/1/2020                None                None
    2/1/2020                Supplier network    In Progress
    3/1/2020                Supplier network    In Progress
    4/1/2020                Installation        In Progress
    5/1/2020                None                None
    6/1/2020                Telematics tool.    In Progress
    7/1/2020                None                None
    8/1/2020                None                None"""
    a = [[t.strip() for t in re.split("  ",l) if t!=""]  for l in data.split("\n")]
    
    df = pd.DataFrame(a[1:],columns=a[0])
    df = df.replace({"None":None})
    df.assign(
        OldC_01_03_StatusValue=df["C_01_03_StatusValue"],
        OldC_02_01_ActionPlan=df["C_02_01_ActionPlan"],
        C_01_03_StatusValue=df["C_01_03_StatusValue"].fillna(method="ffill"),
        C_02_01_ActionPlan=df["C_02_01_ActionPlan"].fillna(method="ffill"),
    ).assign(
        C_01_03_StatusValue=lambda dfa: np.where(dfa["OldC_02_01_ActionPlan"].shift()!="In Progress",
                                                dfa["OldC_01_03_StatusValue"],
                                                dfa["C_01_03_StatusValue"]
                                                ),
        C_02_01_ActionPlan=lambda dfa: np.where(dfa["OldC_02_01_ActionPlan"].shift()!="In Progress",
                                                dfa["OldC_02_01_ActionPlan"],
                                                dfa["C_02_01_ActionPlan"]
                                                )
    ).drop(["OldC_01_03_StatusValue","OldC_02_01_ActionPlan"], axis=1)
    

    【讨论】:

      猜你喜欢
      • 2022-07-23
      • 2021-11-15
      • 2020-10-02
      • 2015-02-19
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多