熊猫按累积顺序在组内分配值

时间:2021-06-07 19:12:07

标签: python python-3.x pandas dataframe

我有一个喜欢的 df

enter image description here

所需的输出是:

enter image description here

其中 b0,D 只是字符串..它们是等式的一部分,我稍后将对其进行评估。

我在编写代码来设计这样的逻辑时遇到了麻烦。

这是我的想法:

  1. 为每个组创建一个包含所有 page_names 的列表
  2. 对于每个组和列表,我们运行一个循环并使用列表索引来计算每行的值

我不确定这是否可行,或者是否有更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:1)

IIUC 尝试迭代一个反转的 expanding 窗口:

prefix = 'D'
multiplier = 'b0'
for win in df.loc[::-1, 'page_nam'].groupby(df['group']).expanding():
    t = '*'.join(prefix + win.iloc[1:])
    df.loc[win.index[-1], 'formula'] = (
        f"{t}*{multiplier}+{t}*{win.iloc[-1]}"
        if t else
        f"{multiplier}*{win.iloc[-1]}"
    )

df.to_string(index=False)

group page_nam  page_num                                                                                      formula
    a    page1         1 Dpage6*Dpage5*Dpage4*Dpage3*Dpage2*Dpage1*b0+Dpage6*Dpage5*Dpage4*Dpage3*Dpage2*Dpage1*page1
    a    page2         2               Dpage6*Dpage5*Dpage4*Dpage3*Dpage2*b0+Dpage6*Dpage5*Dpage4*Dpage3*Dpage2*page2
    a    page3         3                             Dpage6*Dpage5*Dpage4*Dpage3*b0+Dpage6*Dpage5*Dpage4*Dpage3*page3
    a    page4         4                                           Dpage6*Dpage5*Dpage4*b0+Dpage6*Dpage5*Dpage4*page4
    a    page5         5                                                         Dpage6*Dpage5*b0+Dpage6*Dpage5*page5
    a    page6         6                                                                       Dpage6*b0+Dpage6*page6
    a    page7         7                                                                                     b0*page7
    b    page1         1                                                         Dpage2*Dpage1*b0+Dpage2*Dpage1*page1
    b    page2         2                                                                       Dpage2*b0+Dpage2*page2
    b    page3         3                                                                                     b0*page3