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)