pandas 根据loc条件更改特定值

x6h2sr28  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(151)

示例数据:

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/仅对这两行为空)。我该怎么做呢?我觉得我只是错过了最后一步。我不知道如何使用我的条件及其逻辑进行赋值。

vulvrdjw

vulvrdjw1#

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

#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

相关问题