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

如何根据国家条件保留DataFrame中ip.src与ip.dst列的对应值?

解决Pandas DataFrame中仅保留与China关联的IP列值问题

原始数据定义

首先是你提供的DataFrame初始化代码:

import pandas as pd
data={'ip.src':['x.x.x.x','y.y.y.y','z.z.z.z'],
'ip.dst':['a.a.a.a','b.b.b.b','c.c.c.c'],
'src_country':['china','US','china'],
'dst_country':['pakistan','china','india']
}

Data=pd.DataFrame(data)

需求实现方案

我们可以通过向量化条件赋值高效完成需求,这种方式契合Pandas的底层优化逻辑,性能更优:

import numpy as np

# 处理ip.src列:仅当src_country为china时保留原值,否则设为空字符串
Data['ip.src'] = np.where(Data['src_country'] == 'china', Data['ip.src'], '')
# 处理ip.dst列:仅当dst_country为china时保留原值,否则设为空字符串
Data['ip.dst'] = np.where(Data['dst_country'] == 'china', Data['ip.dst'], '')

执行后得到的结果:

ip.src    ip.dst src_country dst_country
0  x.x.x.x              china    pakistan
1            b.b.b.b          US       china
2  z.z.z.z              china      india

备选方案(小数据集适用)

如果需要更直观的逐行处理逻辑(适合数据量较小的场景),可以使用apply方法:

def filter_ip(row):
    row['ip.src'] = row['ip.src'] if row['src_country'] == 'china' else ''
    row['ip.dst'] = row['ip.dst'] if row['dst_country'] == 'china' else ''
    return row

Data = Data.apply(filter_ip, axis=1)

注:优先推荐向量化方法,因为apply逐行处理在大数据集下会显著降低运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:52:02