如何用if/then语句做python循环?

jdzmm42g  于 2023-01-11  发布在  Python
关注(0)|答案(1)|浏览(183)

我使用Jupyter笔记本中的Pandas来计算下面的数据集结构,下面的数据集结构包含列“产品”的重复项。

| name  | val_id |val_amt | our_val_amt | val_against | product | **NEW FIELD**
| compx |  xx1   | 530    |   424       |    418      |   XL    |   290
| compx |  xx1   | 530    |   424       |    134      |   CL    |   134
| compx |  xx2   | 590    |   472       |    600      |   XL    |   369
| compx |  xx2   | 590    |   472       |    103      |   CL    |   103

我尝试循环遍历'name'列(在我的示例中只有1个,但有更多),并执行以下if/then条件。最后根据输出结构化数据。
条件
1.如果“产品”=“CL”且小于“瓦尔_against”,则将“saved_against”值插入“新字段”中,例如val_against(134)〈our_val_amt(424),因此“新字段”= 134(第2行)。
2.如果乘积=“XL”并且在相同的“瓦尔_id”(xx 1)中。要减去的余数将插入到“新字段”中。“our_val_amt”= 424 - 134(来自步骤1)= 290。这将插入到新字段上方。
3.对瓦尔_id xx 2重复步骤。新字段CL = 103且XL = 472 - 103 = 369。
4.最后一步将数据重组为以下所需输出。
我试过将变量分组在一起,并将“产品”作为列,但不幸的是,我收到了6000+列,不知道如何计算这种情况下的计算。我也试过循环,但没有太大成功。
预期输出为:

val id
                        ---------------
                        | xx1   | xx2 |
                        | our_val_amt |
---------------------------------------
| product  |val_against |  424   | 472 |
----------------------------------------
| XL       |   418      |  290   |     |
| CL       |   134      |  134   |     |
| XL       |   600      |        | 369 |
| CL       |   103      |        | 103 |
nxowjjhe

nxowjjhe1#

这是你要找的吗?

col = 'NEW FIELD'
idx = ['product','val_against','val_id','our_val_amt']

r = df.set_index(idx).unstack([-2,-1])[col].reset_index().fillna('')
r
product val_against    xx1    xx2
                       424    472
     CL         103         103.0
     CL         134  134.0       
     XL         418  290.0       
     XL         600         369.0
    • 注:**删除最后一个.fillna('')以将值保留为数字,并将缺失值保留为nan,因为这样更便于在后面的步骤中使用。

相关问题