簡體   English   中英

在 pandas 中滾動 function 有條件

[英]Rolling function in pandas with condition

我有一個具有以下結構的 dataframe:

import numpy as np
import pandas as pd

df = pd.DataFrame(
    {
        "date": ["2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04"] * 2,
        "group": ["A", "A", "A", "A", "B", "B", "B", "B"],
        "x": [1, 2, 2, 3, 2, 3, 4, 2],
        "condition": [1, 0, 1, 0] * 2
    }
)
df

我想計算列 x 的滾動平均值:

  • 每組
  • 僅使用過去的數據(不使用當前行)
  • 僅使用condition = 1的滾動平均值的數據。

結果應如下所示:

在此處輸入圖像描述

我怎樣才能在 pandas 中做到這一點? 謝謝!

我認為我們應該根據條件過濾 dataframe,然后計算 x 的平均值

  • group == 當前行的組
  • date < 當前行的日期
  • 條件 == 1

df.apply用於應用到 dataframe 的所有行

df['rolling_avg_x'] = df.apply(lambda x: df[(df.group == x.group) & (df.date < x.date) & (df.condition == 1)].x.mean(), axis=1)

這會給你 output 作為願望

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM