我需要创建一个使用元组列表过滤数据框的函数-将数据框和元组列表作为参数,如下所示:
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
答案 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