python - 在方程中添加一个新值,直到满足条件

标签 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|

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/

相关文章:

python - 没有参数 装饰器 装饰器?

python - 单词和表情符号计数器

python - 更新 Pandas Dataframe 列 A 中的所有值,仅当 B 中的值不为零时才使用列 B 的值

python - 具有多个特征的 RNN 的数据形状/格式

python - 从 Ruby 客户端访问 Python XML-RPC 服务

Python:这是覆盖 __eq__ 和 __hash__ 的好方法吗?

python - 为什么 Mako 找不到包含它的模板旁边的模板?

python - 使用 Pandas 按列返回 n 个最小索引

python - 使用 Pandas 在 Dataframe 列中查找紧密匹配的值索引

python - 汽车旅馆可以在 pandas 中矢量化吗?