首页 > 解决方案 > 如何创建一个数据框,其中一列的输入是动态的并通过依赖于该列中另一个条目的 IF 语句派生

问题描述

我希望将使用 IF 语句计算第二列中的值的两列 Excel 表转换为 Pandas 数据框。

在此处输入图像描述

A 列数字是静态的。

B 列数字是动态的(B5 除外,它始终保持 100%)并在 Excel 中使用以下 IF 语句计算(第 5 行是起点/参考点):

B4 =IF((B5*(1+Variable_1))<2, B5*(1+Variable_1), 2)

B3 =IF((B4*(1+Variable_1))<2, B4*(1+Variable_1), 2)

B2 =IF((B3*(1+Variable_1))<2, B3*(1+Variable_1), 2)

...等等。

Variable_1 = A 列为负数时使用的百分比(在本例中为 5%)。

当 A 列切换为正值,即 >0% (A5) 时,IF 语句变为:

B6 =IF((B5*(1-Variable_2))>0, B5*(1-Variable_2), 0)

B7 =IF((B6*(1-Variable_2))>0, B6*(1-Variable_2), 0)

… 等等。

Variable_2 也是一个百分比,在 B 列为正数时使用(在本例中也是 5%)。

当谈到 Python 时,我是一个完全的业余爱好者,但我希望有人可以帮助我做一些在 Excel 中相当容易做的事情!提前谢谢了。

标签: python-3.xexcelpandasnumpyif-statement

解决方案


好吧,那么每次您希望 A 更改时,您都可以重建您的数据框:

A = [i/100.0 for i in range(-4,5)]

v1 = 5/100.0
v2 = 5/100.0

b5 = 1.0
b4 = min(2,b5*(1+v1))
b3 = min(2,b4*(1+v1))
b2 = min(2,b3*(1+v1))
b1 = min(2,b2*(1+v1))

b6 = max(0,b5*(1-v2))
b7 = max(0,b6*(1-v2))
b8 = max(0,b7*(1-v2))
b9 = max(0,b8*(1-v2))


import pandas as pd

df = pd.DataFrame( {"A": A, "B": [b1, b2, b3, b4, b5, b6, b7, b8, b9]})

print(df)

输出:

      A         B
0 -0.04  1.215506
1 -0.03  1.157625
2 -0.02  1.102500
3 -0.01  1.050000
4  0.00  1.000000
5  0.01  0.950000
6  0.02  0.902500
7  0.03  0.857375
8  0.04  0.814506

推荐阅读