python pandas多条件筛选实现方式
作者:AGMTI
用户在使用pandas进行多条件筛选时发现无现成方法,自行编写函数实现,数据为虚构,供参考学习,鼓励支持脚本之家
python pandas多条件筛选
我们在使用pandas操作表格时,通常会使用到筛选功能,但我在网上查找了很多资料,pandas貌似没有相应的方法,因此我自己写了一个方法,
- 代码为:
import pandas as pd
def df_screen(df,cd):
'''表筛选
df:pd.DataFrame
cd: {字段:[条件1,条件2],} 数据格式字典
'''
df_cy = df.copy()
idx_z = [ True for i in df_cy.index]
orcom = lambda a,b: [ any([a[i],b[i]]) for i in range(len(a))] # 列表a与列表b两两 或 比较
addcom = lambda a,b: [ all([a[i],b[i]]) for i in range(len(a))] # 列表a与列表b两两 与 比较
for z in cd:
if isinstance(cd[z],list):
for index,c in enumerate(cd[z]):
if index!=0:
idx_c = orcom(idx_c,list(df_cy[z] == c))
else:
idx_c = list(df_cy[z] == c)
else:
idx_c = list(df_cy[z] == cd[z])
idx_z = addcom(idx_z ,idx_c)
return df_cy.loc[idx_z,:]
数据准备
test = pd.DataFrame({'车型': ['皓影', '皓影', '皓影', '皓影', '皓影', '皓影', '皓影', '皓影', '皓影', '皓影', '本田CR-V', '本田CR-V', '本田CR-V', '本田CR-V', '本田CR-V', '本田CR-V', '本田CR-V', '本田CR-V'], '新能源类型': ['传统燃料', '传统燃料', '传统燃料', '常规混合动力', '传统燃料', '传统燃料', '传统燃料', '传统燃料', '常规混合动力', '常规混合动力', '传统燃料', '传统燃料', '传统燃料', '传统燃料', '常规混合动力', '常规混合动力', '插电式混合动力', '插电式混合动力'], '销量': [4, 176, 1, 35, 3, 1, 774, 38, 167, 17, 8, 1, 267, 3, 35, 3, 2, 1]})

函数调用
cd = {
"车型":["皓影","本田CR-V"], # 需要筛选的字段及筛选的内容
"新能源类型":["传统燃料","常规混合动力"]
}
df_screen(test,cd)
注意:数据为虚构
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
