下面的例子是一个优化的输出,它产生了一个值列表,我将使用这些值作为过滤器,并应用于另一组数据。
我试图消除那些产生的值/筛选器已经在其他行中覆盖的行,只留下唯一的值/筛选器。例如,如果我应用索引行#1(var_1 > 2,var_1<5,var_2>5,var_2 <9)中的值/筛选器,它将产生与索引行0(1,5,5,9)中的值/筛选器相同的结果。
索引行#0、#2和#3应该是unique_result = True
在尝试#1中,我的代码只是查看值是<=到最小值还是>=到最大值,但正如您所看到的,记录#1显示为True,因为第四个值9大于或等于最大值。
在尝试#2中,我过滤了嵌套框架,首先删除了我正在迭代的行,然后查看该值是否小于过滤后的嵌套框架的最小值。(我只对一个值这样做,因为我得到了我不理解的NaN)。
df = pd.DataFrame(
{
"var_1_lower_limit": [1, 2, 1, 3, 2],
"var_1_upper_limit": [5, 5, 4, 7, 6],
"var_2_lower_limit": [5, 5, 3, 6, 4],
"var_2_upper_limit": [9, 9, 8, 9, 7],
}
)
def find_unique(
var_1_lower_limit, var_1_upper_limit, var_2_lower_limit, var_2_upper_limit
):
if (
var_1_lower_limit <= df_filtered.var_1_lower_limit.min()
or var_1_upper_limit >= df_filtered.var_1_upper_limit.max()
or var_2_lower_limit <= df_filtered.var_2_lower_limit.min()
or var_2_upper_limit >= df_filtered.var_2_upper_limit.max()
):
return True
else:
return False
### Attempt #1
df["unique_result"] = df.apply(
lambda x: find_unique(
x["var_1_lower_limit"],
x["var_1_upper_limit"],
x["var_2_lower_limit"],
x["var_2_upper_limit"],
),
axis=1,
)
display(df)
### Attempt #2
for i in df.itertuples():
df_filtered = df.drop(df[df.index == i.Index].index)
df["low_value_2"] = df_filtered.var_1_lower_limit.apply(
lambda x: True if x < i.var_1_lower_limit else False
)
display(df)
字符串
编辑:添加了我希望以x1c 0d1x结束的输出
2条答案
按热度按时间ovfsdjhp1#
好的,再次感谢@Laurent,他指出了我忽略的一个组合,所以我意识到我需要遍历所有可能的潜在值组合,而不是试图比较过滤器是最小值还是最大值。
字符串
yx2lnoni2#
下面是一种使用Pandas shift的惯用方法:
字符串
然后又道:
型