我有一个使用 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/