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

如何在Pandas中筛选countryCode包含于对应myprice列的行?

筛选Pandas DataFrame中countryCode包含在对应行myprice列的记录

嘿,我来帮你解决这个Pandas筛选的问题!先回顾下你的场景:

原始数据

你有这样一个DataFrame:

countryCodeNamenumbermypriceprices
DZname1number1US.pnan
DZname1number1AU.currency45
DZname1number1DZ.currency55
DZname1number1DZ.p62
DZname1number1AU.p73
DZname1number1US.currencynan
AUname1number1US.pnan
AUname1number1AU.currency77

需求

你希望仅保留countryCode的字符串出现在对应行myprice字段中的记录,最终得到的结果如下:

countryCodeNamenumbermypriceprices
DZname1number1DZ.currency55.0
DZname1number1DZ.p62.0
AUname1number1AU.currency77.0

为什么你的尝试没成功?

你之前写的两行代码都没达到预期,原因是:

  • df[df.countryCode.isin(df.myprice)]:isin()是检查countryCode是否存在于整个myprice列的集合中,不是逐行匹配对应的值;
  • df[df.myprice.str.contains(df.countryCode.str)]:str.contains()默认接收固定的字符串/正则表达式,直接传入Series的话无法实现逐行的对应匹配。

正确的解决方案

这里有两种简单有效的方法可以实现你的需求:

方法一:使用apply逐行判断

这是最直观的方式,通过apply遍历每一行,检查当前行的countryCode是否包含在myprice中:

import pandas as pd

# 读取你的数据(你已经用read_clipboard获取了df)
df = pd.read_clipboard()

# 执行逐行筛选
filtered_df = df[df.apply(lambda row: row['countryCode'] in row['myprice'], axis=1)]

# 查看结果
print(filtered_df)

方法二:使用向量化函数(更高效)

如果你的数据集很大,apply的效率可能不够理想,这时候可以用numpy.vectorize实现向量化的逐行匹配:

import pandas as pd
import numpy as np

df = pd.read_clipboard()

# 定义判断函数
def check_country_in_myprice(myprice_str, country_code):
    return country_code in myprice_str

# 向量化函数
vectorized_check = np.vectorize(check_country_in_myprice)

# 筛选数据
filtered_df = df[vectorized_check(df['myprice'], df['countryCode'])]

# 查看结果
print(filtered_df)

这两种方法都能精准得到你想要的结果,运行后输出的DataFrame就和你期望的完全一致啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:26:13