【问题标题】:Groupby month parameter in Multi-level Index in pandas熊猫多级索引中的分组月份参数
【发布时间】:2019-05-26 15:22:08
【问题描述】:

我有一个大的 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中的正回报数(即索引的日期部分中的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

【问题讨论】:

  • 请不要发布数据图片,直接复制粘贴问题中的数据并格式化为代码
  • 我单击代码并获得“在此处输入代码”,但是当我尝试从 excel 中粘贴文本时,它总是给出一张图片。它只说保存或取消。有没有办法在代码图标中输入表格而不必全部输入
  • 也许可以先粘贴到记事本,然后从记事本复制

标签: pandas dataframe pandas-groupby multi-index


【解决方案1】:

这是一个较小的数据,使用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']]

【讨论】:

  • @path.s 这行得通,但我无法让它与多索引一起使用。我遇到的问题是我无法弄清楚如何从索引级别 = 1 开始计算月份。所以我尝试了这个 df3['Date_obj'] = df3.groupby(level=1).apply(lambda x: datetime.strptime(x, '%m/%d/%Y').month) 它给出了以下错误。 TypeError: strptime() 参数 1 必须是 str,而不是 DataFrame
  • 当您对 groupby() 对象执行 apply() 时,您要应用的参数是数据帧的切片(实际上是另一个数据帧),而不是单元格中的值(本例中的字符串) .我建议做df.reset_index(level='Date', inplace=True); df['Date_obj'] = df['Date'].apply(lambda x: datetime.strptime(x, '%m/%d/%Y').month); df.groupby('Date_obj').count()[['DAILY_RETURN']]
猜你喜欢
  • 2022-10-24
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 2017-06-08
  • 2013-12-04
  • 1970-01-01
  • 2017-06-03
相关资源
最近更新 更多