代码之家  ›  专栏  ›  技术社区  ›  user026

如何根据特定窗口的平均值(行数)创建新列?

  •  0
  • user026  · 技术社区  · 8 月前

    我有一个这样的数据帧:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame({"ID":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
                       "A":[30, 20, 10, 20, 60, 80, 90, 70, 120, 150, 120, 140]})
    

    我想创建一个新的列“B”,每4行的平均值(df[“a”])作为一个窗口。平均值应该在这4行中重复,但作为另一列。所以结果应该是这样的:

     df
    Out[6]: 
        ID    A      B
    0    1   30   20.0
    1    2   20   20.0
    2    3   10   20.0
    3    4   20   20.0
    4    5   60   75.0
    5    6   80   75.0
    6    7   90   75.0
    7    8   70   75.0
    8    9  120  132.5
    9   10  150  132.5
    10  11  120  132.5
    11  12  140  132.5
    

    我试过这样的东西 df["B"] = df.rolling(window=4)['A'].mean() ,但没有如预期的那样工作。有人能帮我吗?

    1 回复  |  直到 8 月前
        1
  •  3
  •   mozway    8 月前

    你不能使用 rolling 这是因为窗户在滑动,而不是固定。

    对于 groupby.transform('mean') :

    import numpy as np
    
    df['B'] = df.groupby(np.arange(len(df))//4)['A'].transform('mean')
    

    df.index//4 代替 np.arange(len(df))//4 如果你已经有了一个范围索引,就像你的例子一样。

    输出:

        ID    A      B
    0    1   30   20.0
    1    2   20   20.0
    2    3   10   20.0
    3    4   20   20.0
    4    5   60   75.0
    5    6   80   75.0
    6    7   90   75.0
    7    8   70   75.0
    8    9  120  132.5
    9   10  150  132.5
    10  11  120  132.5
    11  12  140  132.5