Оборачиваемость портфеля с Pandas - PullRequest
2 голосов
/ 08 июля 2020

Я хотел бы рассчитать оборот портфеля для ежемесячного ребалансированного портфеля, который выглядит так:

df = pd.DataFrame({'Date': ['6/30/2015','6/30/2015','6/30/2015','7/30/2015','7/30/2015','7/30/2015'],'Ticker': ['AAPL','MSFT','IBM','AAPL','MSFT','AMZN']})
df['Date']=pd.to_datetime(df['Date'])

В частности, я хотел бы знать за каждый месяц, сколько позиций в портфеле было заменены. Таким образом, для июля он должен показывать 1/3, поскольку IBM был заменен на AMZN.

1 Ответ

2 голосов
/ 08 июля 2020

Вы можете развернуть и использовать shift для сравнения:

pivoted = df.assign(rank=df.groupby('Date').cumcount()).pivot('Date','rank','Ticker')

(pivoted!=pivoted.shift()).sum(1)/pivoted.shape[1]

Вывод:

Date
2015-06-30    1.000000
2015-07-30    0.333333
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...