我有一个接收数据帧的函数,以及一个列名,运算符和阈值的字典。
函数如下:
df = pd.DataFrame(...)
df["passed_thresholds"] = False
threshold_dict = {"height": (operator.lt, 0.7), "width": (operator.gt, 0.1)}
def my_func(df, threshold_dict):
# return df with "passed_thresholds" equal true for rows that meet the thresholds.
我想做的是找到df
中满足threshold_dict
中阈值的所有行,并将“ passed_thresholds”列设置为True,仅适用于那些行。通常,我可以很轻松地做到这一点:
df.loc[(df["height"] < 0.7) & (df["width"] > 0.1), "passed_thresholds"] = True
但是这里的问题是,我不知道在threshold_dict中有多少个元素以及它们的值是多少。顺便说一句,threshold_dict是灵活的,如果您也有一个更好的主意,我可以更改它的外观/工作方式。例如,也许传递一个运算符不是最好的主意。
答案 0 :(得分:1)
让我们尝试concat
和for循环,然后应用all
out = pd.concat([y[0](df[x],y[1]) for x, y in threshold_dict.items()],axis=1).all(1)
df['passed_thresholds'] = out