Filtrar dinámicamente un marco de datos de pandas

Estoy tratando de filtrar un marco de datos de pandas usando umbrales para tres columnas

import pandas as pd
df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
                   "B" : [2, 5, 3, 2, 6],
                   "C" : [-5, 2, 1, 8, 2]})
df = df.loc[(df.A > 0) & (df.B > 2) & (df.C > -1)].reset_index(drop = True)

df
    A  B  C
0   2  5  2
1  10  3  1
2   3  6  2

Sin embargo, quiero hacer esto dentro de una función donde los nombres de las columnas y sus umbrales me son dados en un diccionario. Aquí está mi primer intento que funciona bien. Básicamente estoy poniendo el filtro dentrocond variable y simplemente ejecutarlo:

df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
                   "B" : [2, 5, 3, 2, 6],
                   "C" : [-5, 2, 1, 8, 2]})
limits_dic = {"A" : 0, "B" : 2, "C" : -1}
cond = "df = df.loc["
for key in limits_dic.keys():
    cond += "(df." + key + " > " + str(limits_dic[key])+ ") & "
cond = cond[:-2] + "].reset_index(drop = True)"
exec(cond)
df
    A  B  C
0   2  5  2
1  10  3  1
2   3  6  2

Ahora, finalmente pongo todo dentro de una función y deja de funcionar (tal vezexec ¡a la función no le gusta que se use dentro de una función!):

df = pd.DataFrame({"A" : [6, 2, 10, -5, 3],
                   "B" : [2, 5, 3, 2, 6],
                   "C" : [-5, 2, 1, 8, 2]})
limits_dic = {"A" : 0, "B" : 2, "C" : -1}
def filtering(df, limits_dic):
    cond = "df = df.loc["
    for key in limits_dic.keys():
        cond += "(df." + key + " > " + str(limits_dic[key])+ ") & "
    cond = cond[:-2] + "].reset_index(drop = True)"
    exec(cond)
    return(df)

df = filtering(df, limits_dic)
df
    A  B  C
0   6  2 -5
1   2  5  2
2  10  3  1
3  -5  2  8
4   3  6  2

Yo sé esoexec La función actúa de manera diferente cuando se usa dentro de una función, pero no estaba seguro de cómo abordar el problema. Además, me pregunto si debe haber una forma más elegante de definir una función para hacer el filtrado con dos entradas: 1)df y 2)limits_dic = {"A" : 0, "B" : 2, "C" : -1}. Agradecería cualquier idea sobre esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta