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

基于交易类型条件将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:40:18