基于条件变换特定的列值,并使用该转换值更新另一行



我有一个看起来像:

的数据框架
Obj_1   Obj_2   Obj_3   Num_1    Num_2     Num_3   Month
A       BCD      QW      111       222     3456    2018-12
B       Bdfh     AQW     1114     1222     23456    2018-12
A       BCD      QW      22222     67      3463    2019-01
B       Bdfh     AQW     15511    2422     13456    2019-01
A       BCD      QW      257      457867    34663   2019-02
B       Bdfh     AQW     11551     27722    53456    2019-02
.....
.....
....

我想应用一些基本的数学计算,以便如果obj_3 =='aqw'且月=='2018-12',则选择相应的num_3值并乘以2,然后将其分配给使用相同OBJ列组合的2019-02对应的行。

因此,输出看起来像:

Obj_1   Obj_2   Obj_3   Num_1    Num_2     Num_3_adj   Month
A       BCD      QW      111       222     3456    2018-12
B       Bdfh     AQW     1114     1222     23456    2018-12
A       BCD      QW      22222     67      3463    2019-01
B       Bdfh     AQW     15511    2422     13456    2019-01
A       BCD      QW      257      457867    34663   2019-02
B       Bdfh     AQW     11551     27722    46912    2019-02
.....
.....
....

我正在考虑首先按对象列订购数据框,然后将标志或计数器分配给唯一的对象行组合。发布该条件过滤的该过滤器,并将其分配给计数器匹配和月份与所需类型匹配的行。

您可以使用以下代码实现预期输出

>>> df.loc[df.query('Obj_3 == "AQW" and Month == "2019-02"').index,'Num_3']=df.query('Obj_3 == "AQW" and Month == "2018-12"')['Num_3'].mul(2).values
>>> df
  Obj_1 Obj_2 Obj_3  Num_1   Num_2  Num_3    Month
0     A   BCD    QW    111     222   3456  2018-12
1     B  Bdfh   AQW   1114    1222  23456  2018-12
2     A   BCD    QW  22222      67   3463  2019-01
3     B  Bdfh   AQW  15511    2422  13456  2019-01
4     A   BCD    QW    257  457867  34663  2019-02
5     B  Bdfh   AQW  11551   27722  46912  2019-02
>>> 

最新更新