【问题标题】:Replace a column value of one dataframe with a column value of another dataframe if the absolute difference between them is the lowest如果它们之间的绝对差值最小,则将一个数据帧的列值替换为另一个数据帧的列值
【发布时间】:2022-01-13 17:05:20
【问题描述】:

我有一个数据框 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 中的值获得的。类似地,通过从 df2 中的第二个值(即 97.58280346)中减去 df1 中的值来获得 diff2。 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

作为结果的最终数据帧应如表 df3 所示。如何获取df3?

df3

Var1
105.1290
52.7885
10.9922
22.8443
73.5880
97.5828
91.9474
41.6485
68.4402
84.9563

【问题讨论】:

  • 为什么要标记这两个值?
  • 这些是 df1 中将被替换的值
  • 好的,我明白了。你如何确定这些?我试图理解,但我有点困惑......

标签: python pandas dataframe replace


【解决方案1】:

使用array broadcasting 计算差异并使用.locidxmin 设置值:

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

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多