熊猫-使用元组列表过滤数据框

时间:2018-12-04 11:05:12

标签: python pandas iterator tuples filtering

我需要创建一个使用元组列表过滤数据框的函数-将数据框和元组列表作为参数,如下所示:

tuplelist=[('A', 5, 10), ('B', 0, 4),('C', 10, 11)]

执行此操作的正确方法是什么?

我尝试了以下方法:

def multcolfilter(data_frame, tuplelist):

    def apply_single_cond(df_0,cond):

        df_1=df_0[(df_0[cond[0]]>cond[1]) & (df_0[cond[0]]<cond[2])]
        return df_1

    for x in range(len(tuplelist)-1):    

  df=apply_single_cond(apply_single_cond(data_frame,tuplelist[x-1]),tuplelist[x])
    return df

1 个答案:

答案 0 :(得分:0)

示例数据框和元组列表:

df = pd.DataFrame({'A':range(1,10), 'B':range(1,10), 'C':range(1,10)})
tuplelist=[('A', 2, 10), ('B', 0, 4),('C', 3, 5)]

代替使用元组,而是使用它们创建字典:

filters = {x[0]:x[1:] for x in tuplelist}
print(filters)
{'A': (5, 10), 'B': (0, 4), 'C': (10, 11)}

您可以使用pd.cut对数据框的列的值进行装箱:

rows = np.asarray([~pd.cut(df[i], filters[i], retbins=False, include_lowest=True).isnull() 
                   for i in filters.keys()]).all(axis = 0)

使用rows作为df的布尔索引器:

df[rows]
   A  B  C
2  3  3  3
3  4  4  4