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)
注意:数据为虚构
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。