逐个获取一个 df 列与另一个 df 列中所有值之间的绝对值差异,为 pandas 中的每个结果创建一个新列

Get absolute value difference between one df column one by one and all values in another df column, creating a new column for each result in pandas

这可能很简单,但我是新手,无法找到合适的搜索词。

我有两个数据框,示例如下。我想从 df2 中获取 col_add 中的所有值,并获取 df1 col_1 中所有值的绝对值差异,为每组结果添加一个新列。

df1 = pd.DataFrame({'col_1':[1,2,3], 'col_2':['d','e','f']})
df1
col_1   col_2
0   1   d
1   2   e
2   3   f

df2 = pd.DataFrame({'col_add':[4,2,1],})
df2
    col_add
0   4
1   2
2   1

所需的结果如下所示:

col_1   col_2   res_0   res_1   res_2
0   1    d       3        1       0
1   2    e       2        0       1
2   3    f       1        1       2

不确定是否有有效的方法来做到这一点?我想使用它的数据真实数据集有 100 到 500 行。任何帮助将不胜感激!

通过 Series.to_numpy 将列转换为 numpy 并广播到 2d array,因此可以传递给新的 DataFrame 并添加到原始的:

arr = np.abs(df1['col_1'].to_numpy()[:, None] - df2['col_add'].to_numpy())

df = df1.join(pd.DataFrame(arr).add_prefix('res_'))
print (df)
   col_1 col_2  res_0  res_1  res_2
0      1     d      3      1      0
1      2     e      2      0      1
2      3     f      1      1      2