我被困在向方程添加新值的时刻,所以欢迎任何帮助。
假设我有这样的数据框:
Name| A | B |
A | 30| 0 |
A | 15| 5 |
B | 10| 5 |
A | 94| 40|
B | 30| 40|
A | 15|125|
A | 3 |150|
和c=0.01
我想重现下一条规则:A1[A]-A2[B]*c+A2[A]+...+An
WHILE > 0
。因此,由于 A1[A]-A2[B]*c+A2[A] > 0
在下一步中,A3[A]
必须添加到初始值等式依此类推,直至满足条件
但我不知道如何将 An 添加到等式末尾。
现在我的代码如下所示:
for a in df['Name']:
c = 0.1
shift = 1
sum = df[df['Name']=='A']['A'] - df[df['Name']=='A']['B'].shift(-1)*c + df[df['Name']=='A']['A'].shift(-shift)
while sum >0:
shift=+1
sum = sum+df[df['Name']=='A']['A'].shift(-shift)
代码中的问题是我只计算了每对 A-s 并且输出为
0 44.5
1 105.0
3 96.5
5 4.0
6 南
虽然我需要程序在总和 >0 时继续将第 n 个 A 值添加到初始方程中
最佳答案
c = 0.1
A =df.loc[df['Name'].eq('A')].reset_index(drop=True)
情况 1:如果 A[B]
的第一个值为 0,如示例中所示。
s = ( A['A'].sub(A['B'].mul(c))
.where(A.index <2,A['A'])
.cumsum() )
print(s)
0 30.0
1 44.5
2 138.5
3 153.5
4 156.5
dtype: float64
情况2:A[B]的第一个值不为0
<小时/>s = ( A['A'].sub(A['B'].mul(c).mask(A.index==0,0))
.where(A.index <2,A['A'])
.cumsum() )
<小时/>
s[s.le(0).cumsum().eq(0)].iloc[-1]
输出
156.5
关于python - 在方程中添加一个新值,直到满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670248/