我有两个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_syn
和build_number
列,但现在包含所有数值数据的最后一列将被称为name
,这是latency
和fmax
的产品。
因此输出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
列的字符串类型。是否有可以为我做这个的内置熊猫方法?我怎样才能进行乘法以获得我需要的结果?
非常感谢。
答案 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列相同。