You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas插入Milk Price列异常:逐行相乘结果重复问题求助

问题:实现Pandas逐行计算牛奶价格列

需求:在rdf中插入Milk Price列,该列值为每行的Milk字段与pdf中的Price字段相乘的结果,但当前代码运行后所有行的Milk Price值均为同一个数值,仅计算了单个行的结果。

原代码

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import preprocessing
import matplotlib.pyplot as plt

recpies = pd.read_csv('recipes_muffins_cupcakes.csv')
prices = pd.read_csv('recipes_price.csv')
rdf = pd.DataFrame(recpies)
pdf = pd.DataFrame(prices)

#recpies ['Milk_Price'] = rdf.iloc[:,-1]*pdf.loc[1]['Price']
mo = str(len(recpies))
res=""
for i in mo:

    res = rdf.loc[int(i)]['Milk'] * pdf.loc[1]['Price']
rdf.insert(3,"Milk Price",res,allow_duplicates=True)

print(rdf)
print(pdf)

当前输出

Type  Flour  Milk  Milk Price  ... Egg  Baking Powder  Vanilla  Salt
0    Muffin   0.55  0.28        5.04  ...   5          0.002    0.000     0
1    Muffin   0.47  0.24        5.04  ...   9          0.001    0.000     0
2    Muffin   0.47  0.23        5.04  ...   4          0.001    0.000     0
3    Muffin   0.45  0.11        5.04  ...   8          0.001    0.000     0
4    Muffin   0.50  0.25        5.04  ...   5          0.002    0.001     0
5    Muffin   0.55  0.27        5.04  ...   5          0.002    0.001     0
6    Muffin   0.54  0.27        5.04  ...   5          0.002    0.000     0
7    Muffin   0.47  0.26        5.04  ...   4          0.001    0.000     0
8    Muffin   0.50  0.17        5.04  ...   6          0.001    0.000     0
9    Muffin   0.50  0.17        5.04  ...   4          0.001    0.000     0
10  Cupcake   0.39  0.00        5.04  ...  14          0.001    0.001     0
11  Cupcake   0.42  0.21        5.04  ...   8          0.003    0.000     0
12  Cupcake   0.34  0.17        5.04  ...   5          0.002    0.001     0
13  Cupcake   0.39  0.13        5.04  ...  10          0.001    0.001     0
14  Cupcake   0.38  0.15        5.04  ...   8          0.000    0.001     0
15  Cupcake   0.42  0.18        5.04  ...   5          0.001    0.000     0
16  Cupcake   0.36  0.14        5.04  ...  11          0.002    0.001     0
17  Cupcake   0.38  0.15        5.04  ...   6          0.001    0.001     0
18  Cupcake   0.36  0.16        5.04  ...   9          0.001    0.001     0
19  Cupcake   0.34  0.17        5.04  ...  13          0.000    0.000     0

[20 rows x 10 columns]

问题原因

原代码的循环逻辑完全错误:

  • mo = str(len(recpies))把数据行数(比如20)转成字符串"20",循环时i取的是字符"2"和"0",仅计算了索引为2和0的行,最后res只保留了最后一次循环的结果(索引0的行计算值)。
  • 最后插入列时把单个值res广播到所有行,导致所有行的Milk Price值相同。

修正方案

Pandas支持矢量化运算,不需要手动循环逐行计算,直接对整列进行运算即可,代码更简洁高效:

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import preprocessing
import matplotlib.pyplot as plt

# 读取数据
recpies = pd.read_csv('recipes_muffins_cupcakes.csv')
prices = pd.read_csv('recipes_price.csv')
rdf = pd.DataFrame(recpies)
pdf = pd.DataFrame(prices)

# 获取牛奶单价(假设pdf中第2行索引为1的Price是牛奶单价)
milk_price = pdf.loc[1]['Price']

# 直接计算整列的Milk Price,自动逐行运算
rdf.insert(3, "Milk Price", rdf['Milk'] * milk_price, allow_duplicates=True)

print(rdf)
print(pdf)

说明

  • rdf['Milk']是Series类型,与单个数值milk_price相乘时,Pandas会自动对Series中的每一个元素执行乘法运算,生成新的Series作为Milk Price列的值。
  • 这种方式比手动循环效率高得多,尤其在数据量较大时优势明显。

内容的提问来源于stack exchange,提问作者Mohammad Mahdi Yazdani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:44:50