回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>目前正在使用pandas和python加载大型CSV文件。我正在努力根据dataframe中三列中的多个值高效地创建和添加一个新列</p>
<p>共有三列(时间、二氧化碳和成本),我想根据一些计算结果添加一个名为gcost的新列</p>
<p>下面的代码可以工作,但速度非常慢。我认为正是这些项目拖了它的后腿:</p>
<p><strong>输入</strong></p>
<pre><code>Id,time,CO2eq,cost
0,10,10,10
1,5,5,5
2,2,3,6
</code></pre>
<p><strong>预期结果</strong></p>
<pre><code>Id,time,CO2eq,cost,gcost
0,10,10,10,X
1,5,5,5,X
2,2,3,6,X
</code></pre>
<p><br/></p>
<p><strong>代码</strong></p>
<pre><code>#wftime, wfco2eq and wfcost are inputted from the front-end.
hhinfo_input_df = pd.read_csv(input_file_path, header=0,
names=['Id','CO2eq', 'time', 'cost'])
hhinfo_input_df['gcost'] = hhinfo_input_df.apply(cost_generate, axis=1)
return hhinfo_input_df
#Normalized weighted values of each criterion (input by user)
def cost_generate(row):
Norm_time = (row['time'] * (wftime / max_time)) * 100000
Norm_co2eq = (row['CO2eq'] * (wfco2eq / max_co2eq)) * 100000
Norm_cost = (row['cost'] * (wfcost / max_cost)) * 100000
gcost = int(round(Norm_time)) + int(round(Norm_co2eq)) + int(round(Norm_cost))
#gcost should never be 0.
if gcost == 0:
return 1
return gcost
</code></pre>