首页 > 解决方案 > 如何从数据框中选择单行,计算累积回报并将其绘制在单个图中

问题描述

我有一个包含多个信号(信号名)及其返回的数据框(端口库)。

数据框截图

我想对每一个进行子集化,计算累积回报,然后将它们绘制在一个图中。我以单人为例一步一步地完成了它:

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()

它不起作用,我试图找到解决方案。

标签: python

解决方案


您通过 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()

推荐阅读