python - 如何从数据框中选择单行,计算累积回报并将其绘制在单个图中
问题描述
我有一个包含多个信号(信号名)及其返回的数据框(端口库)。
我想对每一个进行子集化,计算累积回报,然后将它们绘制在一个图中。我以单人为例一步一步地完成了它:
ChInvIA = portbase[portbase['signalname'] == 'ChInvIA']
cum_perf_ChInvIA = ChInvIA['return'].cumsum() + 100
cum_perf_ChInvIA.plot()
plt.show()
对于多个信号,这将花费我太长时间,因此我尝试遍历我的数据帧。
for i in signals:
i = portbase[portbase['signalname'] == 'i']
cum_perf_i = i['return'].cumsum() + 100
cum_perf_i.plot()
plt.show()
它不起作用,我试图找到解决方案。
解决方案
您通过 name 调用循环变量和循环中的变量,并与包含 i ( ) 而不是变量本身的字符串i
进行比较。你应该这样做:signalname
'i'
for i in signals:
signal_i = portbase[portbase['signalname'] == i]
cum_perf_i = signal_i['return'].cumsum() + 100
cum_perf_i.plot()
plt.show()
要将所有图都放在同一个图中,您应该使用 matplotlib 的subplots函数:
fig, ax = plt.subplots(len(signals))
for ind, i in enumerate(signals):
signal_i = portbase[portbase['signalname'] == i]
cum_perf_i = signal_i['return'].cumsum() + 100
cum_perf_i.plot(ax=ax[ind])
plt.show()
推荐阅读
- ios - 通过 iOS 使用 Sylius API
- javascript - Firebase 托管部署错误“HTTP 错误:404,未找到”
- typescript - 触发下一个 JSON 项
- docker - Docker Gelf 驱动程序自定义字段
- .net - 具有现有数据库的 ef6 .net 核心
- javascript - 使用 GridFS 下载文件
- c# - NameResolutionFailure 与 Azure Storage Unity UWP 应用程序(在 Player 中工作)
- dynamics-crm - Dynamics CRM:在 Dynamics CRM 中为电子邮件从 1 个队列转发到另一个队列创建新案例
- php - Laravel 获取重定向地址
- react-native - 性能监视器反应原生