如何根据国家条件保留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
相关产品推荐
相关产品推荐

