我有两个数据框:
第一个数据框 df1
如下所示:
variable value
0 plastic 5774
2 glass 42
4 ferrous metal 642
6 non-ferrous metal 14000
8 paper 4000
这是第二个数据帧df2
的头部:
waste_type total_waste_recycled_tonne year energy_saved
non-ferrous metal 160400.0 2015 NaN
glass 14600.0 2015 NaN
ferrous metal 15200 2015 NaN
plastic 766800 2015 NaN
我想更新第二个数据帧 energy_saved
中的 df2
,这样我将 df2 中的 total_waste_recycled_tonne
变量乘以 df1 中的变量到 df2 中的 energy_saved
列中.
例如:
对于塑料:5774 将与 df2 中的 waste_type
变量的每个 platic
total_waste_recycled_tonne
相乘
即:
energy_saved
= 5774 * 766800
这是我尝试过的:
df2["energy_saved"] = df1[df1["variable"]=="plastic"]["value"].values[0] * df2["total_waste_recycled_tonne"][df2["waste_type"]=="plastic"]
然而问题是当我做其他的时候,其余的又变回了NaN
。我需要更好的方法来处理这个问题吗?
答案 0 :(得分:1)
尝试通过 merge()
并通过 how='right'
:
df=df1[['variable','value']].merge(df2[['waste_type','total_waste_recycled_tonne']],left_on='variable',right_on='waste_type',how='right')
最后:
df2["energy_saved"]=df['value'].mul(df['total_waste_recycled_tonne'])
df2
的输出:
waste_type total_waste_recycled_tonne year energy_saved
0 non-ferrous metal 160400.0 2015 2.245600e+09
1 glass 14600.0 2015 6.132000e+05
2 ferrous metal 15200.0 2015 9.758400e+06
3 plastic 766800.0 2015 4.427503e+09
4 plastic 762700.0 2015 4.403830e+09
答案 1 :(得分:1)
使用map
:
df2['energy_saved'] = (df2['waste_type'].map(df1.set_index('variable')['value'])
.mul(df2['total_waste_recycled_tonne']
)
答案 2 :(得分:1)
df2['energy_saved'] = (
df1.set_index('variable').reindex(df2['waste_type'])['value'] *
df2.set_index('waste_type')['total_waste_recycled_tonne']
).values
df2
:
waste_type total_waste_recycled_tonne year energy_saved
0 non-ferrous metal 160400.0 2015 2.245600e+09
1 glass 14600.0 2015 6.132000e+05
2 ferrous metal 15200.0 2015 9.758400e+06
3 plastic 766800.0 2015 4.427503e+09
4 plastic 762700.0 2015 4.403830e+09