基于交易类型条件将Pandas Series中sharesTraded值转为负数
解决方法
原代码存在的问题
- 用
for循环遍历DataFrame列不符合Pandas的设计逻辑,效率极低,且df['transactionType'].item()只会获取列的第一个元素,无法遍历判断每一行的交易类型 replace('-', '')是替换字符串中的-符号,完全没有实现“将数值转为负数”的逻辑,且Pandas的replace默认不修改原DataFrame,需要赋值或指定inplace=True
正确实现方式
推荐使用Pandas的向量化操作,比循环高效得多,同时能准确匹配条件:
方法1:布尔索引直接赋值
import pandas as pd import json # 加载数据 data = json.load(open("AAPL22_trades.json")) df = pd.DataFrame.from_dict(data) # 针对两种交易类型,将对应sharesTraded转为负数 sell_mask = df['transactionType'].isin(['Sell', 'Automatic Sell']) df.loc[sell_mask, 'sharesTraded'] = df.loc[sell_mask, 'sharesTraded'] * -1
方法2:使用np.where生成新列(或覆盖原列)
import pandas as pd import numpy as np import json data = json.load(open("AAPL22_trades.json")) df = pd.DataFrame.from_dict(data) # 保留原列的话可以新建列,比如df['adjusted_shares'],直接覆盖就用原列名 df['sharesTraded'] = np.where( df['transactionType'].isin(['Sell', 'Automatic Sell']), df['sharesTraded'] * -1, df['sharesTraded'] # 非卖出类型保持原值,应对后续买入数据 )
说明
isin(['Sell', 'Automatic Sell'])可以一次性匹配两种交易类型,避免重复判断- 向量化操作会自动处理每一行数据,无需手动循环,性能远优于
for循环 - 代码保留了非卖出类型的原值,完美适配后续可能新增的买入数据
内容的提问来源于stack exchange,提问作者kiestuthridge23
相关产品推荐
相关产品推荐

