【问题标题】:How to apply array function (previous row calculation) with pandas group by如何使用 pandas group by 应用数组函数(前一行计算)
【发布时间】:2021-07-26 06:23:25
【问题描述】:

我有一个数组函数,可以应用于我从这篇文章中获得的 pandas 数据框 How to get the number of previous nearest row which is larger than or equal current row in pandas? 这是我从帖子中获得的功能

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

此功能可以应用于该帖子中的数据 但是这个功能不能与 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。

【问题讨论】:

    标签: python pandas linear-algebra stock quantitative-finance


    【解决方案1】:

    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
    

    【讨论】:

    • 非常感谢。你第二次帮助我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多