一个数据框的列乘以另一个数据框的值(由键确定)

我想获取一个包含约26,000行的大型数据框foodList,并将foodList ['food_quant']列乘以dataframe foodConversions中的某个值。为了从foodConversions确定该值,另一列foodList ['food_name']的字符串对应于foodConversions的索引。我这样做是为了将不同食物的克转换成卡路里,每种食物具有不同数量的卡路里。

我试图做嵌套循环以遍历foodConversions中的每个值,看看它是否等于foodList ['food_name'],但是那太慢了,由于某种原因,它实际上并没有完成运行。因此,我宁愿放弃这种方法。 我也尝试过使用applymap和lambda函数,但是我认为我做的不正确。 最后,我尝试使用另一个stackoverflow问题中概述的方法,但是我不确定如何将其应用到我的情况下,甚至不确定它是否适用于我的情况。这是它的链接:Multiply dataframe with values from other dataframe

这是两个数据框:

foodConversions = pd.Dataframe([2,3],index=['meat','vegetables'],columns=['cal/gram'])
            cal/gram
meat        2
vegetables  3
foodList = pd.Dataframe([['meat',40]['meat',30]['vegetables',20]['meat',10]],columns=['food_name','food_quant'])
    food_name    food_quant
0   meat         40
1   meat         30
2   vegetables   20
3   meat         10

输出应如下所示:

    food_name    food_quant
0   meat         80
1   meat         60
2   vegetables   60
3   meat         20

希望这是有道理的,我试图做到尽可能详尽,所以对冗长的解释感到抱歉。谢谢大家的帮助!

xyzz108 回答:一个数据框的列乘以另一个数据框的值(由键确定)

我们可以做reindexlocmapmerge

reindex|loc

df2.assign(food_quant=df2.food_quant*(df1['cal/gram'].reindex(df2.food_name).values))# change reindex to loc
Out[121]: 
    food_name  food_quant
0        meat          80
1        meat          60
2  vegetables          60
3        meat          20

map|replace

df2.assign(food_quant=df2.food_quant*df2.food_name.map(df1['cal/gram']))
df2.assign(food_quant=df2.food_quant*df2.food_name.replace(df1['cal/gram']))
,

尝试使用:

print(foodList.set_index('food_name').mul(foodConversions.reindex(foodList['food_name'])['cal/gram'],axis=0).reset_index())

输出:

    food_name  food_quant
0        meat          80
1        meat          60
2  vegetables          60
3        meat          20
本文链接:https://www.f2er.com/3169318.html

大家都在问