python - 将一个数据帧的列乘以另一个数据帧的值,由键确定

标签 python python-3.x pandas

我想获取一个包含大约 26,000 行的大型数据框 foodList,并将列 foodList['food_quant'] 乘以数据框 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

希望这是有道理的,我尽量做到尽可能全面,所以对于冗长的解释,我深表歉意。谢谢大家的帮助!

最佳答案

我们可以做 reindexlocmapmerge

重新索引|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 |替换

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']))

关于python - 将一个数据帧的列乘以另一个数据帧的值,由键确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58686646/

相关文章:

访问子字典键的 Pythonic 方式

python - 通过嵌套循环创建二维 numpy 数组

python-3.x - 在 python 中将文本文档转换为 ASCII 数字的 numpy 数组

python - 使用幂律拟合方程

python - 将 Pandas 数据框转换为包含字典或列表列表

python - 对 pandas 列的值求和并删除重复的值

python - 将 DataFrame 列名称映射到适当的单元格

python - 如何绘制尖角?

python - 如何为特定 work_item 的不同阶段设置时间差

java - 检查字符串是否包含 char 数组中的值