熊猫:根据以前未知的条件数分配值

时间:2020-09-09 17:10:13

标签: python pandas numpy dataframe

我有一个接收数据帧的函数,以及一个列名,运算符和阈值的字典。

函数如下:

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是灵活的,如果您也有一个更好的主意,我可以更改它的外观/工作方式。例如,也许传递一个运算符不是最好的主意。

1 个答案:

答案 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