Как выбрать отдельные строки из фрейма данных, рассчитать совокупный доход и отобразить его на одном рисунке - PullRequest
0 голосов
/ 20 июня 2020

У меня есть фрейм данных (база портов), который содержит несколько сигналов (имя сигнала) и их возврат.

Скриншот фрейма данных

Я хочу разбить все на подмножества, рассчитать совокупную доходность и затем отобразить их в виде одной цифры. Я проделал это шаг за шагом, используя в качестве примера один:

ChInvIA = portbase[portbase['signalname'] == 'ChInvIA']
cum_perf_ChInvIA = ChInvIA['return'].cumsum() + 100
cum_perf_ChInvIA.plot()
plt.show()

С несколькими сигналами это заняло бы у меня слишком много времени, и поэтому я пытался l oop поверх моего фрейма данных.

for i in signals:
    i = portbase[portbase['signalname'] == 'i']
    cum_perf_i = i['return'].cumsum() + 100
    cum_perf_i.plot()
    plt.show()

Не работает, я пытался найти решение.

1 Ответ

0 голосов
/ 20 июня 2020

Вы вызываете как переменную цикла, так и переменную в l oop по имени i и сравниваете signalname со строкой, содержащей i ('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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...