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.51105.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