如果一个数据帧的列值与另一个数据帧的列值之间的绝对差值最低,则替换它们
Replace a column value of one dataframe with a column value of another dataframe if the absolute difference between them is the lowest
我有一个数据框 df1,其值如下。
df1
Var1
105.1290
52.7885
10.9922
22.8443
73.5880
96.2842
91.9474
41.6485
68.4402
89.7366
df2
Var2
84.95632934
97.58280346
现在,我将 df1 中的值替换为 df2 中的值,其绝对差值如下所示。 diff1 是通过从 df2 中的第一个值(即 84.95632934)中减去 df1 中的值获得的。类似地,diff2 是通过从 df2 中的第二个值(即 97.58280346)中减去 df1 中的值获得的。 diff1 列显示 df1 中 89.7366 值的差异最小,因此它被替换为 84.95632934。类似地,diff2 显示 df1 中的 96.2842 值的绝对差异最小,因此它被替换为 97.58280346.
Var1 diff1 diff2
105.1290 20.1727 7.5462
52.7885 -32.1678 -44.7943
10.9922 -73.9641 -86.5906
22.8443 -62.1120 -74.7385
73.5880 -11.3683 -23.9948
96.2842* 11.3279 -1.2986
91.9474 6.9911 -5.6354
41.6485 -43.3078 -55.9343
68.4402 -16.5161 -29.1426
89.7366* 4.7803 -7.8462
作为结果的最终数据帧应该如 table df3 中所示。如何获得df3?
df3
Var1
105.1290
52.7885
10.9922
22.8443
73.5880
97.5828
91.9474
41.6485
68.4402
84.9563
使用array broadcasting计算差异并使用.loc
和idxmin
设置值:
other = df2["Var2"].to_numpy()
differences = pd.DataFrame(df1['Var1'].to_numpy()[:, None] - other).abs()
df1["Var1"].loc[differences.idxmin()] = other
>>> df1
Var1
0 105.129000
1 52.788500
2 10.992200
3 22.844300
4 73.588000
5 97.582803
6 91.947400
7 41.648500
8 68.440200
9 84.956329
我有一个数据框 df1,其值如下。
df1
Var1
105.1290
52.7885
10.9922
22.8443
73.5880
96.2842
91.9474
41.6485
68.4402
89.7366
df2
Var2
84.95632934
97.58280346
现在,我将 df1 中的值替换为 df2 中的值,其绝对差值如下所示。 diff1 是通过从 df2 中的第一个值(即 84.95632934)中减去 df1 中的值获得的。类似地,diff2 是通过从 df2 中的第二个值(即 97.58280346)中减去 df1 中的值获得的。 diff1 列显示 df1 中 89.7366 值的差异最小,因此它被替换为 84.95632934。类似地,diff2 显示 df1 中的 96.2842 值的绝对差异最小,因此它被替换为 97.58280346.
Var1 diff1 diff2
105.1290 20.1727 7.5462
52.7885 -32.1678 -44.7943
10.9922 -73.9641 -86.5906
22.8443 -62.1120 -74.7385
73.5880 -11.3683 -23.9948
96.2842* 11.3279 -1.2986
91.9474 6.9911 -5.6354
41.6485 -43.3078 -55.9343
68.4402 -16.5161 -29.1426
89.7366* 4.7803 -7.8462
作为结果的最终数据帧应该如 table df3 中所示。如何获得df3?
df3
Var1
105.1290
52.7885
10.9922
22.8443
73.5880
97.5828
91.9474
41.6485
68.4402
84.9563
使用array broadcasting计算差异并使用.loc
和idxmin
设置值:
other = df2["Var2"].to_numpy()
differences = pd.DataFrame(df1['Var1'].to_numpy()[:, None] - other).abs()
df1["Var1"].loc[differences.idxmin()] = other
>>> df1
Var1
0 105.129000
1 52.788500
2 10.992200
3 22.844300
4 73.588000
5 97.582803
6 91.947400
7 41.648500
8 68.440200
9 84.956329