Параметр группового месяца в многоуровневом индексе в пандах - PullRequest
0 голосов
/ 29 декабря 2018

У меня большой DF, который имеет такую ​​структуру.Он имеет несколько акций на уровне 0, а Дата - на уровне 1. Начинает ежемесячные данные с 31.12.2004 и продолжает до 31.12.2017 (не показано).

      Date      DAILY_RETURN
A   12/31/2004      NaN
    1/31/2005      -8.26
    2/28/2005       8.55
    3/31/2005      -7.5
    4/29/2005      -6.53
    5/31/2005       15.71
    6/30/2005      -4.12
    7/29/2005       13.99
    8/31/2005       22.56
    9/30/2005       1.83
    10/31/2005     -2.26
    11/30/2005      11.4
    12/30/2005     -6.65
    1/31/2006       1.86
    2/28/2006       6.16
    3/31/2006       4.31

То, что я хочу сделать, этосгруппируйте по месяцам, а затем посчитайте количество ПОЛОЖИТЕЛЬНЫХ возвратов в daily_returns по месяцам (т. е. 01, затем 02, 03 и т. д. из части индекса Date).Этот код даст мне счетчик, но только по уровню индекса = 0.
df3.groupby(level=0)['DAILY_RETURN'].agg(['count'])

Есть еще один вопрос, самый близкий, но я не могу заставить код работать.Может ли кто-нибудь помочь.В конечном счете, я хочу сделать групповые акции, а затем месяц и ФИЛЬТР всех акций, которые имеют по крайней мере 70% положительной доходности за месяц.Кажется, я не могу понять, как получить положительный доход от фрейма данных либо

Как сгруппировать записи панд в фрейме данных по дате в неуникальном столбце

1 Ответ

0 голосов
/ 29 декабря 2018

Вот для небольших данных, используя datetime

import pandas as pd
from datetime import datetime

df = pd.DataFrame()
df['Date'] = ['12/31/2004', '1/31/2005', '12/31/2005', '2/28/2006', '2/28/2007']
df['DAILY_RETURN'] = [-8, 9, 5, 10, 14]
df = df[df.DAILY_RETURN > 0]
df['Date_obj'] = df['Date'].apply(lambda x: datetime.strptime(x, '%m/%d/%Y').month)
df.groupby('Date_obj').count()[['DAILY_RETURN']]

Counts

...