根据条件转换特定的列值,并使用转换后的值更新另一行

时间:2019-05-22 02:41:04

标签: python python-3.x pandas

我有一个看起来像这样的数据框:

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'并且Month =='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
.....
.....
....

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

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码获得预期的输出,

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