如何基于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
相关产品推荐
相关产品推荐

