Python 向方程式中添加一个新值,直到满足条件为止

Python 向方程式中添加一个新值,直到满足条件为止,python,pandas,Python,Pandas,我一直在为方程添加新值,所以欢迎任何帮助 假设我有这样的数据帧: Name| A | B | A | 30| 0 | A | 15| 5 | B | 10| 5 | A | 94| 40| B | 30| 40| A | 15|125| A | 3 |150| for a in df['Name']: c = 0.1 shift = 1 sum = df[df['Name']=='A']['A'] -

我一直在为方程添加新值,所以欢迎任何帮助

假设我有这样的数据帧:

   Name| A | B |
     A | 30| 0 |  
     A | 15| 5 |  
     B | 10| 5 |  
     A | 94| 40|
     B | 30| 40|  
     A | 15|125|
     A | 3 |150|
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)
c=0.01

我想复制下一条规则:
A1[A]-A2[B]*c+A2[A]+…+An
,而
>0
。因此,由于
A1[A]-A2[B]*c+A2[A]>0
在下一步,必须将
A3[A]
添加到初始方程中,依此类推,直到满足条件为止 但我不知道如何在等式的末尾加上一个

目前,我的代码如下所示:

   Name| A | B |
     A | 30| 0 |  
     A | 15| 5 |  
     B | 10| 5 |  
     A | 94| 40|
     B | 30| 40|  
     A | 15|125|
     A | 3 |150|
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
1105.0
396.5
5.4.0
6南

当总和大于0时,我需要程序继续将第n个A值添加到初始方程中,您可以执行以下操作:

# extract the name A
dfA = df[df.Name=='A']

# compute cumulative sum of A1[A] - A2[B]
s = dfA['A'].sub(dfA['B'].shift(-1).mul(-c).fillna(0)).cumsum()

# find the last positive value
# might need to check if there is one
s[s.le(0).cumsum().eq(0)].iloc[-1]
输出:

160.2
情况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
输出

156.5

是否只使用名称为A的行?@ansev是。带B的行仅表示可以有其他记录,但仅当您想要
A1[A]-A2[B]*c+A2[A]-A3[B]*c+A3[A]..
?@ansev nope时才需要。A1[A]-A2[B]*c+A2[A]+A3[A]+A4[A]……你能提供更多的上下文吗?我不太明白。这是一个怎样的等式?为什么要使用Pandas数据框?我认为这里的问题是,检查是在偶数条件下进行的,为什么使用属性样式的列访问而不是
[]
?这对我来说并不重要
[]
访问更安全,例如,如果您有一个名为
count
的列,则
df.count
不会提供该列。
156.5