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

DataFrame数据清理:保留Destination与Origin均为World的行,删除其余同值行

解决贸易流DataFrame的筛选问题

嘿,这个问题我熟!首先得说,你用iterrows()处理200万行绝对是踩坑了——这方法不仅慢得离谱,还很容易因为索引变化或者变量名写错出问题(比如你代码里遍历的是dfn,但删行用的是df,这大概率是你之前失败的原因之一)。

咱们直接用pandas的向量化操作来解决,既高效又靠谱。你的需求是:删除所有原产国和目的国相同但不是"World"的行,保留原产国和目的国都是"World"的记录,同时保留所有原产国≠目的国的行。

方法一:直接构造符合要求的条件

我们可以把筛选条件拆成两种符合要求的情况,用逻辑或(|)连接:

  • 情况1:目的国≠原产国(这是你原来的筛选逻辑)
  • 情况2:目的国=原产国,且这个值是"World"

代码实现如下:

# 构建筛选条件
keep_condition = (dfn["Destination"] != dfn["Origin"]) | \
                 ((dfn["Destination"] == dfn["Origin"]) & (dfn["Destination"] == "World"))

# 应用筛选,得到新的DataFrame
dfn = dfn[keep_condition]

方法二:反向排除不符合要求的行

另一种思路是直接排除掉**原产国=目的国且不是"World"**的行,剩下的就是我们要保留的:

# 定义需要排除的条件
exclude_condition = (dfn["Destination"] == dfn["Origin"]) & (dfn["Destination"] != "World")

# 取反后筛选,保留符合要求的行
dfn = dfn[~exclude_condition]

为什么这两种方法更好?

  • 速度快:pandas的向量化操作是基于底层C实现的,处理200万行基本秒级完成,比iterrows()快几十甚至上百倍。
  • 避免索引问题:遍历删行时,inplace=True会实时修改DataFrame的索引,导致后续遍历的行索引错位,而向量化操作是一次性完成筛选,完全不会有这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:57:34