【问题标题】:Moving average for value present in two dataframe columns in pythonpython 中两个数据框列中存在的值的移动平均值
【发布时间】:2022-11-17 00:37:20
【问题描述】:

自昨晚以来,我一直遇到以下问题,但在任何地方都找不到任何解决方案。

给定数据框df

  team1 team2 score1 score2
0     A     B      1      0
1     C     A      3      2
2     B     A      2      3
3     A     C      2      1

我想传递一个计算函数移动平均线对于 team1 但同时考虑 team1team2 列。

移动平均数 2 的输出为:

  team1 team2 score1 score2 mov_avg_a
0     A     B      1      2         1   # for A
1     C     A      3      2         3   # for C
2     B     A      2      3         2   # for B
3     A     C      2      1         2   # for A

我的想法是使用自定义函数调用.apply()

步骤 1. 将 team1team2 列混合到临时列 tempA 中,如果 A(例如)存在,则返回 score1score2 值,如下所示:

  team1 team2 score1 score2 tempA
0     A     B      1      0     1
1     C     A      3      2     2
2     B     A      2      3     3
3     A     C      2      1     2

第 2 步。将 rolling(2) 应用于 tempA 以获得所需的输出,如上所示。

我试过创建这个过程,但失败了。

我知道在大型数据帧的情况下使用 apply() 会在计算上很昂贵,但我想不出这里的“单行”解决方案。

预先感谢您的见解。

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    你可以做wide_to_long然后pivotrollingmean

    s = (pd.wide_to_long(df.assign(key=df.index),['team','score'],i = 'key',j='m').
         reset_index().
         pivot('key','team','score').
         fillna(0).
         rolling(2,min_periods=1, axis=1).mean())
    Out[32]: 
    team    A    B    C
    key                
    0     1.0  0.5  0.0
    1     2.0  1.0  1.5
    2     3.0  2.5  1.0
    3     2.0  1.0  0.5
    df = df.join(s)
    

    【讨论】:

      猜你喜欢
      • 2016-03-03
      • 2021-08-20
      • 1970-01-01
      • 2021-04-28
      • 2013-12-15
      • 2017-11-12
      • 1970-01-01
      相关资源
      最近更新 更多