将 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_sim
的 cycles
列的每个元素乘以 patched_benchmark_df_syn
的 fmax
列的对应元素,然后然后将结果存储在一个具有完全相同结构的新 DataFrame 中,包含 build_number
和 name
列,但现在包含所有数值数据的最后一列将称为 latency
,这是 fmax
和 cycles
的乘积。
因此输出 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 相同。
我有两个 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_sim
的 cycles
列的每个元素乘以 patched_benchmark_df_syn
的 fmax
列的对应元素,然后然后将结果存储在一个具有完全相同结构的新 DataFrame 中,包含 build_number
和 name
列,但现在包含所有数值数据的最后一列将称为 latency
,这是 fmax
和 cycles
的乘积。
因此输出 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 相同。