Pandas DataFrame两列相乘结果异常,寻求正确实现方案
问题分析与解决方法
错误原因
你遇到的问题是列名size和DataFrame内置的size属性重名了:
df.size是DataFrame的内置属性,返回整个DataFrame的总元素数量(你的df有10行3列,总元素数为30)- 所以
df.price * df.size实际是把price列的每个值都乘以30,比如第一行10×30=300,和你得到的错误结果完全对应
正确的简洁写法
要访问size列而非内置属性,改用方括号索引即可,直接完成高效的向量化计算:
df['values'] = df['price'] * df['size']
执行后values列会得到正确的逐行乘积结果:
0 10 1 18 2 24 3 28 4 30 5 30 6 28 7 24 8 18 9 10 Name: values, dtype: int64
关于你的循环代码
你的循环里还有一处小错误:df[i,3]的索引方式不正确,应该改用df.iloc[i, 3]或df.loc[i, 'values']。不过完全没必要用循环实现,上面的向量化写法不仅简洁,执行效率也远高于循环(数据量越大优势越明显)。
内容的提问来源于stack exchange,提问作者Pedroski
相关产品推荐
相关产品推荐

