我有一个喜欢的 df
所需的输出是:
其中 b0,D 只是字符串..它们是等式的一部分,我稍后将对其进行评估。
我在编写代码来设计这样的逻辑时遇到了麻烦。
这是我的想法:
我不确定这是否可行,或者是否有更好的方法来解决这个问题。
答案 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