在pandas数据帧中汇总稀疏日期范围

时间:2017-11-16 10:47:34

标签: python pandas

我的数据如下:

date         id  value
2017-01-01   1   1
2017-01-01   2   1
2017-01-02   1   3
2017-01-03   1   6
2017-02-15   1   1
2017-02-17   1   5
2017-02-18   1   8
2017-02-19   1   3

我想按如下方式对其进行累加:对于每个日期,请汇总接下来两周内所有行并对值进行求和。数据集中没有重叠,日期组的间距非常稀疏。

对于上面的示例,结果将是:

date         id value
2017-01-01   1  9
2017-01-01   2  1
2017-02-15   1  17

如何在pandas数据框中执行此操作?

我已经尝试了以下方法,但它没有成功:

df = df.groupby(pd.Grouper(key='date', freq='14d', axis=1))['value'].sum().reset_index()

这使用了2周的固定滚动窗口,而我希望始终在数据的第一天开始。如果窗口边界位于中间,则此方法可以将批次拆分为两个。另外,我无法确定如何将Grouper日期分组与正常分组相结合,以便考虑key列。

1 个答案:

答案 0 :(得分:0)

根据您想要的结果,您似乎希望将本月上半月或下半月的值相加。

import pandas as pd

创建样本

df = pd.DataFrame({
    "date": [
        "2017-01-01", "2017-01-01", "2017-01-02", "2017-01-03",
        "2017-02-15", "2017-02-17", "2017-02-18", "2017-02-19",
    ],
    "id": [1, 2, 1, 1, 1, 1, 1, 1],
    "value": [1, 1, 3, 6, 1, 5, 8, 3],
})

整天减少至1或15

df["date"] = pd.to_datetime(df["date"]).apply(
    lambda x: x.replace(day=1) if x.day < 15 else x.replace(day=15)
)

groupby.sum以获取日期和ID

df.groupby(["date", "id"]).value.sum().reset_index()