熊猫多级索引中的Groupby month参数

时间:2018-12-28 21:51:55

标签: pandas dataframe pandas-groupby multi-index

我有一个大型DF,其结构如下。它具有多个处于0级的股票,并且日期处于1级。从2004年12月31日开始每月的数据,直到2017年12月31日(未显示)。

      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中的POSITIVE回报数进行计数(即从索引的Date部分开始依次为01、02、03等)。该代码将为我提供计数,但仅按索引级别= 0进行。
df3.groupby(level=0)['DAILY_RETURN'].agg(['count'])

还有其他问题,这个问题最接近,但是我无法使代码正常工作。有人可以帮忙吗?最终,我想做的是分组股票,然后按月过滤所有月度收益至少达到70%的股票。我似乎也无法弄清楚如何从数据框中获得正收益

How to group pandas DataFrame entries by date in a non-unique column

1 个答案:

答案 0 :(得分:0)

这里是使用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