【发布时间】:2018-06-02 05:50:39
【问题描述】:
我有一个带有基于工作日的 DateTimeIndex 的 pandas 数据框。对于索引中的每个月,我还指定了一个“标记”日。
这是该数据框的玩具版本:
# a dataframe with business dates as the index
df = pd.DataFrame(list(range(91)), pd.date_range('2015-04-01', '2015-6-30'), columns=['foo']).resample('B').last()
# each month has an single, arbitrary marker day specified
marker_dates = [df.index[12], df.index[33], df.index[57]]
对于索引中的每个月,我需要计算该月特定行切片中 foo 列的平均值。
我需要有两种不同的方式来指定这些切片:
1) 第 m 天到第 n 天。
示例可能是(该月的第 2 到第 4 个工作日)。所以 april 将是 1 (apr2)、4 (apr3) 和 5 (apr 6) 的平均值 = 3.33。 5 月是 33(5 月 4 日)、34(5 月 5 日)、35(5 月 6 日)= 34。我不认为索引中没有出现的周末/节假日是天数。
2) 标记日期之前/之后的第 m 天到标记日期之前/之后的第 n 天。
示例可能是“每个月从标记日期前 1 天到标记日期后 1 天的切片平均值”例如。 4 月,标记日期为 4 月 17 日。查看索引,我们想要 apr16、apr17 和 apr20 的平均值。
对于示例 1,我有一个丑陋的解决方案,每个月我都会切掉那个月的行,然后应用 df_slice.iloc[m:n].mean()
每当我开始使用 pandas 进行迭代时,我总是怀疑自己做错了。所以我想有一种更清洁、pythonic/矢量化的方式可以在所有月份都得到这个结果
对于示例 2,我不知道基于多个月的任意日期进行切片平均的好方法。
【问题讨论】:
-
所以你有索引并且你想根据这些索引取平均值?
-
@Dark 是的,我有索引和 foo 列——我想对 foo 切片采取手段。