Pandas每月/每周变化的汇总订单



我正在使用django从SQL数据库中检索数据,然后将其转换为pandas数据帧。目标是计算每个人的一些指标以及所有人的总体指标。

在计算完我的指标后,我想将这些值与前一个月进行比较,并将变化计算为百分比。

其工作原理大致如下:

member_frame = member_frame.truncate(before=(previous_start - timedelta(days=1)))

它给了我从上个月到本月底的所有条目。

然后我计算一些值的总和:

aggregate_avgs = member_frame.groupby(member_frame.index.month).mean().replace(np.inf, 1).fillna(0)

最后计算百分比变化:

avgs_change = aggregate_avgs.pct_change().replace(np.inf, 1).fillna(-1)

如果我们看看从1月到2月的变化,就像这样:

target_date
1           -1.000000 -1.000000 -1.000000           -1.0 -1.000000 -1.000000  -1.000000
2            0.142857  0.076923 -0.828571            0.0 -0.587774 -0.699994  -0.507199

这很有效。。。好的由于我只对从第一个日期到第二个日期的更改感兴趣,所以我只是从第二行中获取值。

但如果我在12月和1月也这样做,我会得到这个:

target_date
1           -1.00000 -1.000000 -1.000000           -1.0 -1.000000 -1.000000  -1.000000
12           0.02682  0.273444  0.449811            0.0  0.259059  0.424178   0.223225

正如你所看到的,这在某种程度上是颠倒的,而且这些变化实际上是针对错误的月份。target_date索引是一个日期时间索引。

我怀疑,如果我在跨年时每周都这样做,同样的情况也会发生。

我做错了什么?我对熊猫还很陌生,所以这可能是一个很容易犯的错误。

IIUC,您可能需要使用resample,这类似于按月份和年份分组:

aggregate_avgs = member_frame.resample('m').mean().replace(np.inf, 1).fillna(0)

我认为您可以像这里描述的那样编写aggregate_avgs = member_frame.groupby(pd.Grouper(freq="M")).mean()

最新更新