python对df中的行执行递归
我想用我的df执行以下计算。我已经在Excel中完成了这项工作,但我不确定如何使用Python完成这项工作。这是计算结果python对df中的行执行递归,python,pandas,recursion,rows,Python,Pandas,Recursion,Rows,我想用我的df执行以下计算。我已经在Excel中完成了这项工作,但我不确定如何使用Python完成这项工作。这是计算结果 initial| recursion begins Name | 1 | 2 | 3 | 4 ... ------------------------------------------------ A | A1 | A2 | A3 | A4 <--given a
initial| recursion begins
Name | 1 | 2 | 3 | 4 ...
------------------------------------------------
A | A1 | A2 | A3 | A4 <--given
a | a1=0 | a2=c1*A2 | a3=c2*A3 | a4=c3*A4 <--calculation (1st cell always = 0)
c | c1=1 | c2=c1-a2 | c3=c2-a3 | c4=c3-a4 <--calculation (1st cell always 1)
产出将是:
Name 1 2 3 4 5
----------------------------------
A 0 .125 .286 .25 .333
Ax 0 .125 .25 .156 .156
Ay 1 .875 .625 .469 .313
B 0 .1 0 .25 -
Bx 0 .1 0 .225 -
By 1 .9 .9 .675 -
谢谢大家! 让我解释一下
a2=c1*a2;c2=c1-a2,然后c2=c1-a2=c1-c1*a2=c1(1-a2)
c3应该是c3=c2(1-A3)=c1(1-A2)(1-A3)
,这就是(1-df)的来源
df=df.set_index('Name')
df1=(1-df).cumprod(1)
df2=df1.shift(1,axis=1).mul(df)
pd.concat([df,df1,df2],keys=['','x','y']).fillna({'1':0})
Out[769]:
1 2 3 4 5
Name
A 0.0 0.125 0.28600 0.250000 0.333000
B 0.0 0.000 0.00000 0.500000 NaN
x A 1.0 0.875 0.62475 0.468562 0.312531
B 1.0 1.000 1.00000 0.500000 NaN
y A 0.0 0.125 0.25025 0.156187 0.156031
B 0.0 0.000 0.00000 0.500000 NaN
嗯,我认为这些信息不足以回答这个问题。在这里产生的结果背后似乎没有什么直觉。你能解释一下你想做什么,以及你是如何得到结果的吗?@cᴏʟᴅsᴘᴇᴇᴅ 我在这里使用的逻辑是如何在excel上编写公式。我的目标是在给定的行A和B上运行2个递归公式。Ax、Ay和Bx、By都是从第一个框中的公式推导出来的。你说得对!但是,当我运行第1行时,我得到:TypeError:无法使用块值操作1-:'int'和'str'@TylerNG的操作数类型不受支持,因为字段名是字符串,所以我不能这样做。(‘无法解析位置0处的字符串“A’,‘发生在索引名处’)@TylerNG您可以这样做,df=df.set_index(‘名称’)哇,它工作了!这与excel有很大的不同。再次感谢!你真棒!
df=df.set_index('Name')
df1=(1-df).cumprod(1)
df2=df1.shift(1,axis=1).mul(df)
pd.concat([df,df1,df2],keys=['','x','y']).fillna({'1':0})
Out[769]:
1 2 3 4 5
Name
A 0.0 0.125 0.28600 0.250000 0.333000
B 0.0 0.000 0.00000 0.500000 NaN
x A 1.0 0.875 0.62475 0.468562 0.312531
B 1.0 1.000 1.00000 0.500000 NaN
y A 0.0 0.125 0.25025 0.156187 0.156031
B 0.0 0.000 0.00000 0.500000 NaN