如何在 Pandas 合并操作期间应用过滤条件但将它们保留在结果 DF 中?

How to apply filter condition during Pandas Merge operation but retain them in the result DF?

我正在尝试用 pandas 做一些等同于以下 SQL 命令的事情:

select *
from tableA as A
left join tableB as B
on A.key = B.key and substr(A.value,1,2) not in ('something', 'something else')

正如您在上面的 sql 查询中看到的,A.value 在连接期间应用了过滤条件,但由于它是左连接,不在条件中的条件不会持续到结果数据集,它仅在连接操作期间适用,这样连接操作将不会考虑满足 A.value 不在 ('something', 'something else') 条件中的任何行。

我尝试了以下 python 代码,但它导致从结果数据集中过滤掉 A.value 行,我需要通过左连接的所有行,但我不想要a.value not in 条件指定的行的合并操作,就像上面的 SQL 语句逻辑一样。

df_output = df_input1[~df_input1['value'].str[:2].isin(['something', 'something_else'])].merge(df_input2, left_on = 'key', right_on = 'key', how='left')

提前谢谢大家!

有点老套,但我的想法是创建一个新列用于加入 df1,并且只为要合并的行填写此列:

import pandas as pd

df_input1 = pd.DataFrame({
    'fruit':['apple','banana','mango'],
    'quantity':[3,4,5],
})

df_input2 = pd.DataFrame({
    'fruit':['apple','banana','mango'],
    'in_stock':[True,False,True],
})

minimum_quantity = 4
ind = df_input1['quantity'].ge(minimum_quantity)
df_input1.loc[ind, 'merge_column'] = df_input1.loc[ind, 'fruit']

merge_filtered_fruits = df_input1.merge(
    df_input2,
    left_on = 'merge_column',
    right_on = 'fruit',
    how = 'left'
).drop(columns=['merge_column'])

print(merge_filtered_fruits)

输出:

  fruit_x  quantity fruit_y in_stock
0   apple         3     NaN      NaN
1  banana         4  banana    False
2   mango         5   mango     True

我很好奇有什么更好的方法