【问题标题】:Group DataFrame by Business Day of Month按工作日分组 DataFrame
【发布时间】:2016-04-29 01:04:50
【问题描述】:

我正在尝试将一个 Pandas DataFrame 分组,它按日期按月的工作日索引,大约每月 22 个。

我想返回一个包含 22 行的结果,在 `DataFrame 中具有某个值的平均值。

我可以按月的一天,但似乎无法弄清楚如何按工作日。

是否有一个函数可以返回某个日期的月份的工作日?

如果有人能提供一个简单的例子,将不胜感激。

【问题讨论】:

标签: python date pandas dataframe grouping


【解决方案1】:

假设您的日期在索引中(如果不使用'set_index):

df.groupby(pd.TimeGrouper('B')) 

time series functionality

【讨论】:

  • df.groupby('B') 不起作用,它只会引发错误
  • 感谢 Stefan 的回答。我想要实现的是类似于下面的 df.groupby(pd.TimeGrouper('B'))['Amount'].mean() 来返回 22 行,每个工作日的平均值跨度>
  • 不客气。希望这能回答您关于按工作日分组的问题。
【解决方案2】:

我认为问题是按每月的工作日分组 - 另一个答案似乎只是将数据重新采样到最近的工作日(至少对我而言)。 此代码返回一个 22 行的 groupby 对象

from datetime import date
import pandas as pd
import numpy as np

d = pd.Series(np.random.randn(1000), index=pd.bdate_range(start='01 Jan 2018', periods=1000))
def to_bday_of_month(dt):
    month_start = date(dt.year, dt.month, 1)
    return np.busday_count(month_start, dt)

day_of_month = [to_bday_of_month(dt) for dt in d.index.date]
d.groupby(day_of_month).mean()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 2010-11-18
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2018-08-13
    相关资源
    最近更新 更多