python - 基于两列值相等的 Pandas 将列中的字段设置为 0

标签 python pandas

我有一个使用 pandas 的 df,其中包含许可证列表和子许可证列表。我需要比较 Parent 和 Sub Permit 列,如果 Parent Permit 等于 sub Permit,则将 Value Total 字段设置为 0。BLD-00045 行本质上需要保留 70000 值,但 ELE 和 PM 需要设置为 0。这可能吗?

Parent Permit    Sub Permit    Value Total
BLD-00045         NaN          70000
ELE-2019         BLD-00045     100
PLM-2019         BLD-00045     200

我想要的输出是这样的

Parent Permit    Sub Permit    Value Total
BLD-00045        NaN           70000
ELE-2019        BLD-00045      0
PLM-2019        BLD-00045      0

最佳答案

从您的数据字里行间看出,我猜测实际上存在某种分层的、树状的许可证结构,并且您只想将成本分配到某些级别。

根据您的示例,听起来您想要识别子许可证等于任何父许可证的行。

您可能想尝试这样的事情:

parent_permits = df['Parent Permit'].unique()
has_sub_permit = df['Sub Permit'].isin(parent_permits)
df.loc[has_sub_permit, 'Value Total'] = 0

两个效率说明:

  • 如果您需要重复检查此条件,您可以考虑向数据框中添加“Has Parent”列。
  • 如果许可证类型本质上是分类的,您可以考虑使用 pandas' Categorical datatype对于那些列。然后,Pandas 将使用整数存储值,这可能会加快操作速度。

关于python - 基于两列值相等的 Pandas 将列中的字段设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546991/

相关文章:

python - 交换数据框中列的内容

python - 用户警告 : Failed to initialize NumPy: module compiled against API version 0xf but this version of numpy is 0xe (Triggered internally at

python - 在 Python 中打印具有最高值的嵌套列表的正确方法是什么

python - 将数据框与字典值列表进行比较

python - Pandas:获取具有较大值的系列中前几行的数量

python - 如何将具有重复索引条目的数据帧与具有唯一索引条目的数据帧合并?

Python:从派生类获取基类值

python - 使用 python elementtree 将 xml 解析为行项目

python - Pandas 如何分解不寻常的文本顺序

python - 替换我的功能的更好方法?