如何使用 pandas 分组依据来应用数组函数(前一行计算)

How to apply array function (previous row calculation) with pandas group by

我有数组函数,可以应用于我从这个 post 获得的 pandas 数据框 这是我从 post

得到的函数
def prev_max_dist(df_col):    
    v = df_col.astype(float).values
    s = v.size
    i = np.arange(s)

    v = np.full((s, s), v)
    v = v - v.T
    v[np.triu_indices(s)] = np.nan

    r = i - (s - np.argmax(v[:, ::-1] >= 0, axis=1) - 1)
    r[r < 0] = 0
    return r

此函数可以应用于来自 post 的数据 但此功能不适用于 group by pandas 我有这样的数据

Symbol    Day     Close    
  a          1       1
  a          2       2
  a          3       6
  a          4       4
  a          5       5
  a          6       4
  a          7       5
  b          1       1
  b          2       2
  b          3       6
  b          4       4
  b          5       5
  b          6       4
  b          7       5

而且我希望这个函数可以应用于符号 A 和 B。

groupby/apply之后使用explode:

您的数据框必须在操作前按 ['Symbol', 'Day'] 个值排序。

df['pnlr'] = df.groupby('Symbol')['Close'].apply(prev_max_dist).explode().values
>>> df
   Symbol  Day  Close pnlr
0       a    1      1    0
1       a    2      2    0
2       a    3      6    0
3       a    4      4    1
4       a    5      5    2
5       a    6      4    1
6       a    7      5    2
7       b    1      1    0
8       b    2      2    0
9       b    3      6    0
10      b    4      4    1
11      b    5      5    2
12      b    6      4    1
13      b    7      5    2