如何获取Pandas数据框滚动窗口中的第一个元素[重复]

vcirk6k6  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(136)
    • 此问题在此处已有答案**:

Taking first and last value in a rolling window(2个答案)
5天前关闭。
我有下面的数据结构:

我想做的是,对于每个地点,日期,确定n天前的确切花费。
我在这里尝试使用滚动窗口,但由于某些原因,当我创建窗口时,我不知道如何获取其中的第一个元素:

dummy_data["spending_3_days_ago"] = (
        dummy_data.sort_values("date")
        .groupby("location")["spendings"]
        .transform(lambda x: x.rolling(3, min_periods=1).??first??())
    )

我可以调用窗口中所有类型的聚合函数,例如:总数,平均数等,但我不能得到第一个。

m2xkgtsf

m2xkgtsf1#

不要使用rolling,而应使用groupby.shift

dummy_data["spending_3_days_ago"] = (
        dummy_data.sort_values("date")
        .groupby("location")["spendings"]
        .shift(3)
    )

输出:

location        date  spendings  spending_3_days_ago
0      1122  2017-12-01     451.12                  NaN
1      1122  2017-12-02     542.43                  NaN
2      1122  2017-12-03     512.23                  NaN
3      1122  2017-12-04     821.23               451.12
4      2233  2017-12-01     892.31                  NaN
5      2233  2017-12-02     303.32                  NaN
6      2233  2017-12-03     673.32                  NaN
7      2233  2017-12-04    1238.32               892.31

或者,如果要模拟min_periods=1,请反向传播这些值:

dummy_data["spending_3_days_ago"] = (
        dummy_data.sort_values("date")
        .groupby("location")["spendings"]
        .apply(lambda g: g.shift(3).bfill())
    )

输出:

location        date  spendings  spending_3_days_ago
0      1122  2017-12-01     451.12               451.12
1      1122  2017-12-02     542.43               451.12
2      1122  2017-12-03     512.23               451.12
3      1122  2017-12-04     821.23               451.12
4      2233  2017-12-01     892.31               892.31
5      2233  2017-12-02     303.32               892.31
6      2233  2017-12-03     673.32               892.31
7      2233  2017-12-04    1238.32               892.31

相关问题