python - 如何使用熊猫数据框进行此列时间行操作?
问题描述
我有一个与 pandas 中的矩阵运算有关的问题,这就是我想要实现的。
我有一个熊猫数据框,每一行对应于配方中包含的成分数量。 成分_包含_in_recipes
第二个数据框包含每种成分的营养数据。 营养数据
我想获得一个新的数据框,其中每一行对应于配方中成分*数量中所含营养素的总和。
对不起,如果我不够清楚,那是我第一次在这里发帖。谢谢你的帮助!
解决方案
您可以在此处使用点积来最有效地解决此问题。如果您不熟悉线性代数:https ://en.wikipedia.org/wiki/Dot_product 。我会解释一下,然后我的实现如下。
您有一个数据框,您的数据框包含每个配方中的成分数量,我们称之为quantities_df
。在一行中,每个单元格对应一种成分。假设你有n
配料。您的一个简短示例:
胡萝卜 | 酒杯 | 麝香 | |
---|---|---|---|
0 | 1 | 125 | 3 |
1 | 0 | 0 | 0 |
2 | 0 | 35 | 0 |
3 | 0 | 125 | 0 |
现在,您有了第二个数据框,其中包含每种成分的营养成分,称为nutrients_df
. 该数据框的每个单元格对应于其中一种成分中的营养素含量。我们有n
行,一个对应于每种成分。同样,一个简短的示例:
nrj_kcal | 蛋白质_g | 糖类_g | 脂质_g | |
---|---|---|---|---|
胡萝卜 | 40.2 | 0.63 | 7.59 | 0.5 |
酒杯 | 741 | 0.7 | 0.99 | 81.5 |
麝香 | 504 | 5.3 | 28.5 | 36.3 |
让我们将一个配方的点积按一列计算。我们有:
1 * 40.2 + 125 * 741 + 3 * 504 = 94177.2
换句话说,您拥有每种成分的产品总和及其营养成分。如果您按每列对每一行进行点积,即矩阵积,您将得到预期的结果。
这是我的实现:
假设您已经拥有quantities_df
and nutrients_df
:
import pandas as pd
import numpy as np
recipe_nutrients = pd.DataFrame(
data=np.dot(quantities_df.values, nutrients_df.values),
columns=nutrients_df.columns
)
这看起来符合预期:
nrj_kcal | 蛋白质_g | 糖类_g | 脂质_g | |
---|---|---|---|---|
0 | 94177.2 | 104.03 | 216.84 | 10296.9 |
1 | 0 | 0 | 0 | 0 |
2 | 25935 | 24.5 | 34.65 | 2852.5 |
3 | 92625 | 87.5 | 123.75 | 10187.5 |
推荐阅读
- java - Java查找依赖jar的绝对路径
- angular - 在角度 7 中安装 ngx-datetime-picker 后出错
- javascript - 我如何在 js 中将提交的表单(输入如 name="array[key]")类型数据作为数组/对象在提交回调中使用
- python - Python Telegram Bot 如何等待用户回答问题并返回
- oracle - 我们可以在 Oracle PDB 实例上创建备份作业吗?
- c++ - 用于累积多个传感器浮动数据流的无碎片数据结构
- amazon-web-services - 如何获取弹性beantalk启动的ec2实例的IP地址范围?
- networking - Apache Tomcat 9 上的 504 网关超时
- ffmpeg - Xfade 过滤器不适用于 ffmpeg
- typescript - 是否有脚本或工具可以帮助将 Flow 自动迁移到 TypeScript?