将 2 个输入 DataFrame 中的每一个的一列相乘

Multiplying just one column from each of the 2 input DataFrames together

我有两个 DataFrame,每个都是完全正常的维度,我想将每个 DataFrame 中的一个特定列相乘:

我的第一个 DataFrame 是:

In [834]: patched_benchmark_df_sim
Out[834]: 
     build_number      name  cycles
0             390     adpcm   21598
1             390       aes    5441
2             390  blowfish     NaN
3             390     dfadd     463
....
284           413      jpeg  766742
285           413      mips    4263
286           413     mpeg2    2021
287           413       sha  348417

[288 rows x 3 columns]

我的第二个 DataFrame 是:

In [835]: patched_benchmark_df_syn
Out[835]: 
     build_number      name    fmax
0             390     adpcm  143.45
1             390       aes  309.60
2             390  blowfish     NaN
3             390     dfadd  241.02
....
284           413      jpeg  197.75
285           413      mips  202.39
286           413     mpeg2  291.29
287           413       sha  243.19

[288 rows x 3 columns]

我想将 patched_benchmark_df_simcycles 列的每个元素乘以 patched_benchmark_df_synfmax 列的对应元素,然后然后将结果存储在一个具有完全相同结构的新 DataFrame 中,包含 build_numbername 列,但现在包含所有数值数据的最后一列将称为 latency,这是 fmaxcycles 的乘积。

因此输出 DataFrame 必须如下所示:

    build_number      name    latency
0            390     adpcm    ## each value here has to be product of cycles and fmax and they must correspond to one another ##
......

我尝试做一个简单的 patched_benchmark_df_sim * patched_benchmark_df_syn 但这不起作用,因为我的数据帧有 name 列是字符串类型。没有可以为我做这个的内置 pandas 方法吗?我怎样才能继续乘法以获得我需要的结果?

非常感谢。

最简单的做法是向 df 添加一个新列,然后 select 添加您想要的列,如果您想将其分配给新的 df:

In [356]:

df['latency'] = df['cycles'] * df1['fmax']
df
Out[356]:
     build_number      name  cycles       latency
0             390     adpcm   21598  3.098233e+06
1             390       aes    5441  1.684534e+06
2             390  blowfish     NaN           NaN
3             390     dfadd     463  1.115923e+05
284           413      jpeg  766742  1.516232e+08
285           413      mips    4263  8.627886e+05
286           413     mpeg2    2021  5.886971e+05
287           413       sha  348417  8.473153e+07
In [357]:

new_df = df[['build_number', 'name', 'latency']]
new_df
Out[357]:
     build_number      name       latency
0             390     adpcm  3.098233e+06
1             390       aes  1.684534e+06
2             390  blowfish           NaN
3             390     dfadd  1.115923e+05
284           413      jpeg  1.516232e+08
285           413      mips  8.627886e+05
286           413     mpeg2  5.886971e+05
287           413       sha  8.473153e+07

如您所见,您不能像尝试的那样将非数字类型的 df 相乘。以上假设 build_number 和名称列与两个 dfs 相同。