将两个输入DataFrame中的每一个只有一列相乘

时间:2015-02-26 10:27:52

标签: python pandas dataframe latency

我有两个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]

我想获取cycles patched_benchmark_df_sim列的每个元素,并将其乘以fmax的{​​{1}}列的相应元素,然后存储结果是具有完全相同结构的新DataFrame,包含patched_benchmark_df_synbuild_number列,但现在包含所有数值数据的最后一列将被称为name,这是latencyfmax的产品。

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

cycles

我尝试做一个简单的 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 ## ...... ,但这不起作用,因为我的DataFrames有patched_benchmark_df_sim * patched_benchmark_df_syn列的字符串类型。是否有可以为我做这个的内置熊猫方法?我怎样才能进行乘法以获得我需要的结果?

非常感谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是在df中添加一个新列,然后选择所需的列,如果要将其分配给新的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相乘。以上假设两个dfs的build_number和name列相同。