【问题标题】:Change specific values based on loc condition根据 loc 条件更改特定值
【发布时间】:2022-12-09 16:39:08
【问题描述】:

样本数据:

sample_data = [
  {'Case #': 'A25', 'Parent Case #': 'A24', 'Data': 'Blah blah'},
  {'Case #': 'B46', 'Parent Case #': nan, 'Data': 'Waka waka'},
  {'Case #': 'B89', 'Parent Case #': 'B46', 'Data': 'Moo moo'},
  {'Case #': 'C12', 'Parent Case #': nan, 'Data': 'Meow'},
  {'Case #': 'C44', 'Parent Case #': nan, 'Data': 'Woof'},
  {'Case #': 'C77', 'Parent Case #': 'C12', 'Data': 'Hiss'},
  {'Case #': 'D55', 'Parent Case #': 'D2', 'Data': 'Ribbet'}
]

df = pd.DataFrame(sample_data)

数据包含可能有也可能没有父案例的案例(即,他们可能是孩子,也可能不是)。没有孙子/最大深度 = 1。

但是,该数据集中不存在一些引用的父母,因此这些案例实际上是孤儿。

出于我的数据的目的,只需删除对父项的引用就可以满足孤儿的要求。我可以这样识别这些孤儿:

df.loc[~df["Parent Case #"].isna() & ~df2["Parent Case #"].isin(df2["Case #"].values)]

对于这两个匹配的行,我想删除“Parent Case #”引用(使该值nan/仅对这两行为空)。我该怎么做呢?我觉得我只是错过了最后一步。我不确定如何使用我的条件及其 & 逻辑进行分配。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您只需指定用于分配缺失值的列:

    #changed df2 to df
    df.loc[df["Parent Case #"].notna() & ~df["Parent Case #"].isin(df["Case #"]), 'Parent Case #'] = np.nan
    print (df)
      Case # Parent Case #       Data
    0    A25           NaN  Blah blah
    1    B46           NaN  Waka waka
    2    B89           B46    Moo moo
    3    C12           NaN       Meow
    4    C44           NaN       Woof
    5    C77           C12       Hiss
    6    D55           NaN     Ribbet
    

    另一个想法 - 为所有行重新分配缺失值:

    df.loc[~df["Parent Case #"].isin(df["Case #"]), 'Parent Case #'] = np.nan
    

    【讨论】:

    • 谢谢!它不会让我再接受几分钟的答案,但这解决了它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2021-08-02
    • 2014-10-09
    • 2020-01-02
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多