首页 > 解决方案 > 逐一获取一个df列与另一个df列中的所有值之间的绝对值差,为pandas中的每个结果创建一个新列

问题描述

这可能很简单,但我相对较新,无法弄清楚正确的搜索词。

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

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 行。任何帮助将非常感激!

标签: pythonpandasdataframecalculated-columns

解决方案


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

推荐阅读