You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何删除IndentNo分组下PO_Ref_No全不为空的所有对应行

问题原因

你原有代码的逻辑是直接删除所有PO_Ref_No为空的行,和「保留存在空PO_Ref_No的整个IndentNo分组、删除所有PO_Ref_No都不为空的IndentNo全部分组」的需求不符,所以会误删10023分组的空行,也无法实现删除整个10024分组的效果。

实现方案

方法1:groupby + transform (性能最优,适合大数据量)

无需新增中间列,一行代码即可完成过滤:

# 空值为np.nan时用这个
df = df[df['PO_Ref_No'].isna().groupby(df['IndentNo']).transform('any')]

# 如果你的空值是空字符串,替换成这个
# df = df[df['PO_Ref_No'].eq('').groupby(df['IndentNo']).transform('any')]

逻辑说明:

  • 先判断每行PO_Ref_No是否为空,得到布尔序列
  • 按IndentNo分组后对布尔序列执行any运算,只要分组内有一个空值,该分组所有行对应的判断结果都为True
  • 用得到的布尔序列过滤原DataFrame,就能保留所有符合要求的行

方法2:groupby + filter (可读性更高)

逻辑更直观,中小数据量下使用足够方便:

df = df.groupby('IndentNo').filter(lambda group: group['PO_Ref_No'].isna().any())

内容的提问来源于stack exchange,提问作者pythondumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:39:01