Python 比较两个数据帧并根据条件替换值

Python 比较两个数据帧并根据条件替换值,python,pandas,numpy,dataframe,data-analysis,Python,Pandas,Numpy,Dataframe,Data Analysis,我有以下两个数据帧: df1 A B C 0 1 2 1 1 7 3 6 2 3 10 11 df2 A B C 0 2 0 2 1 8 4 7 其中A、B和C是两个数据帧的列标题 我试图将df1的列与df2的列进行比较,以便df2中的第一行是下限,第二行是上限。df1中超出下限和上限(按列)的任何值都需要替换为NaN 因此,在本例中,输出应为: A B C 0 nan 2 nan 1 7 3 6 2

我有以下两个数据帧:

df1
    A B  C
 0  1 2  1
 1  7 3  6
 2  3 10 11

df2
    A B C
 0  2 0 2
 1  8 4 7
其中A、B和C是两个数据帧的列标题

我试图将
df1
的列与
df2
的列进行比较,以便
df2
中的第一行是下限,第二行是上限。
df1
中超出下限和上限(按列)的任何值都需要替换为
NaN

因此,在本例中,输出应为:

    A    B   C
0   nan  2   nan
1    7   3   6
2    3   nan nan
基本上,我正在尝试df1[df1,但这不起作用。我也尝试过
.where()
,但没有成功

非常感谢您的帮助,谢谢

IIUC

df=df1.where(df1.ge(df2.iloc[0])&df1.lt(df2.iloc[1]))
     A    B    C
0  NaN  2.0  NaN
1  7.0  3.0  6.0
2  3.0  NaN  NaN
IIUC


你可以这样做:

lower = df1 < df2.iloc[0, :]
upper = df1 > df2.iloc[1, :]

df1[lower | upper] = np.nan

print(df1)

你可以这样做:

lower = df1 < df2.iloc[0, :]
upper = df1 > df2.iloc[1, :]

df1[lower | upper] = np.nan

print(df1)

这是一个带有
df.clip
mask

df1.mask(df1.ne(df1.clip(lower = df2.loc[0],upper = df1.loc[1],axis=1)))


这是一个带有
df.clip
mask

df1.mask(df1.ne(df1.clip(lower = df2.loc[0],upper = df1.loc[1],axis=1)))


在之间使用
的方法稍有不同

df1.apply(lambda x:x.where(x.between(*df2.values, False)), axis=1)

之间使用
的方法稍有不同

df1.apply(lambda x:x.where(x.between(*df2.values, False)), axis=1)