【问题标题】:How to create a new column with values after groupby & rollingsum?如何在 groupby 和滚动总和之后创建具有值的新列?
【发布时间】:2019-09-16 02:44:22
【问题描述】:

我正在尝试在现有 df 中创建一个新列。新列的值是由 groupby 和 rolling sum 的组合创建的。我该怎么做?

我尝试了两种方法,都导致 NaN 值或“插入列的索引与帧索引不兼容”

df = 类似这样的:


    HomeTeam    FTHP
0   Bristol Rvs 0
1   Crewe           0
2   Hartlepool  3
3   Huddersfield    1

我试过了:

(1)

df['new'] = df.groupby('HomeTeam')['FTHP'].rolling(4).sum()

(2)

df['new'] = df.groupby('HomeTeam').FTHP.apply(lambda x: x.rolling(4).mean())

(1) 输出以下是我想在新列中添加的值。

HomeTeam        
Brighton     12      NaN
             36      NaN
             49      NaN
             72      2.0
             99      2.0

我正在尝试将这些值添加到相应 HomeTeam 旁边的新列中。导致前三个的 NaN(因为它正在滚动(4))并在之后拾取值,例如:


    HomeTeam    FTHP      RollingMean
0   Bristol Rvs 0         NaN
1   Crewe           0         NaN
2   Hartlepool  3         NaN
3   Huddersfield    1         NaN

【问题讨论】:

    标签: python pandas group-by multiple-columns rolling-sum


    【解决方案1】:

    为了确保与原始(非重复)索引对齐:

    df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(4).sum().reset_index(0, drop=True)
    

    df:

      HomeTeam  FTHP
    A        a     0
    B        b     1
    C        b     2
    D        a     3
    E        b     4
    

    as_index=False 分组添加ngroup 值作为第0 级,保留第1 级中的原始索引:

    df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(2).sum()
    #0  A    NaN
    #   D    3.0
    #1  B    NaN
    #   C    3.0
    #   E    6.0
    #Name: FTHP, dtype: float64
    

    删除级别=0 以确保与原始索引对齐。您的原始索引不应重复,否则您会得到 ValueError

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2021-09-12
      • 2018-12-31
      • 2021-02-25
      • 2021-09-22
      • 2020-02-22
      • 2018-09-10
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多