python - 将一个数据框的列乘以另一个数据框的值,由键确定
问题描述
我想获取一个包含大约 26,000 行的大型数据框 foodList,并将 foodList['food_quant'] 列乘以数据框 foodConversions 中的某个值。为了从 foodConversions 中确定这个值,另一列 foodList['food_name'] 有一个对应于 foodConversions 索引的字符串。我这样做是为了将不同食物的克数转换为卡路里,每种食物类型都有不同数量的卡路里。
我尝试过嵌套循环来遍历 foodConversions 中的每个值,看看它是否等于 foodList['food_name'],但这非常慢,并且由于某种原因实际上从未完成运行;因此,我宁愿放弃这种方法。我也尝试过使用 applymap 和 lambda 函数,但我认为我做得不对。最后,我尝试使用另一个 stackoverflow 问题中概述的方法,但我不确定如何将其应用于我的情况,或者它是否适用于我的情况。这是它的链接:将数据框与其他数据框的值相乘
这是两个数据框:
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
希望这是有道理的,我试图尽可能彻底,所以我很抱歉冗长的解释。谢谢大家的帮助!
解决方案
我们可以做reindex
or loc
or or map
ormerge
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']))
推荐阅读
- javascript - 如何在 React 中自定义错误消息?
- vb.net - 在VB中将字节转换为负值,反之亦然
- ruby-on-rails - Heroku 上的 Rails,预编译资产失败
- php - php echo没有按顺序回显
- rest - 恢复连接后将离线本地数据与 REST API 同步的策略
- django - django 在 DetailView 中调用 .annotate 上下文处理器
- php - 我从 Laravel 中的函数获得空值
- php - Xdebug 不会在断点上停止 Mac OS + Docker
- apache-spark - 如何从 percentile_approx 代码编写自定义函数,其结果与 excel 中的 percentile.inc 相同?
- mysql - 有人可以提供与hibernate类似的注释列表以用于具有反应式客户端的数据库模型吗?