python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python pandas多条件筛选

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)

注意:数据为虚构

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文