Python pandas实现DataFrame逐行计算并写入Total列问题咨询
方法1:修改你现有循环逻辑实现写入
你现在的循环已经拿到了每行的索引index,直接通过索引定位赋值即可,修改后的代码如下:
import pandas as pd df = pd.read_csv(mypath) for index, row in df.iterrows(): if row['Age'] < 2: total = row['Input'] * 1.2 elif row['Age'] > 8: total = row['Input'] * 1.1 else: total = row['Input'] * 0.9 # 直接写入对应行的Total列 df.loc[index, 'Total'] = total # 验证结果 print(df)
注意这种iterrows循环的方式只适合小数据量场景,数据量超过1万行的时候性能会非常差。
方法2:更高效的向量化运算实现(推荐)
pandas原生支持向量化操作,不需要逐行循环就能完成计算,运行效率比循环高几十到上百倍,代码示例如下:
import pandas as pd import numpy as np df = pd.read_csv(mypath) # 定义判断条件和对应的乘数 conditions = [ df['Age'] < 2, df['Age'] > 8 ] multipliers = [1.2, 1.1] # 计算Total列,不满足上面两个条件的默认乘0.9 df['Total'] = np.select(conditions, multipliers, default=0.9) * df['Input'] # 验证结果 print(df)
两种方法运行后你示例表格里的第一行Total都会得到90、第二行得到135的正确结果。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

