You need to enable JavaScript to run this app. 如何基于DataFrame列值绘制买卖场景下的连续数值变化趋势图
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DataFrame列值绘制买卖场景下的连续数值变化趋势图

你要实现的库存累计走势计算,用np.where做向量化符号转换是最优的方案,比手动修改Sale行数值更简洁高效,完整实现代码如下:

首先默认你的DataFrame列名为action(对应Buy/Sale标识)、trade_date(对应交易时间)、amount(对应交易数量)。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据后先做日期格式转换,方便后续绘图
df['trade_date'] = pd.to_datetime(df['trade_date'])
# 一步生成带正负的交易量:Buy为正,Sale为负
df['adjusted_amount'] = np.where(df['action'] == 'Buy', df['amount'], -df['amount'])
# 计算累计库存
df['inventory'] = df['adjusted_amount'].cumsum()

# 绘制走势图表
plt.figure(figsize=(12, 6))
plt.plot(df['trade_date'], df['inventory'], marker='o', linewidth=2, color='#165DFF')
plt.xlabel('交易日期')
plt.ylabel('当前库存')
plt.title('库存变动趋势图')
plt.xticks(rotation=45)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

方案优势

  • 全程向量化操作,无需遍历修改原数据,哪怕百万级数据量也能毫秒级完成计算,性能远高于循环或者apply方案
  • 逻辑清晰无歧义,不需要额外做数据切片改值,避免误改原数据的风险
  • 代码简洁,核心计算逻辑只有2行

如果不想新增中间列adjusted_amount,也可以合并成一行计算:

df['inventory'] = np.where(df['action'] == 'Buy', df['amount'], -df['amount']).cumsum()

内容的提问来源于stack exchange,提问作者yuntres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 05:27:03