我有一个看起来像这样的数据框:
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
.....
.....
....
我正在考虑先按对象列对数据框进行排序,然后将标志或计数器分配给唯一的对象行组合。 发布该条件的过滤器,并将其分配给计数器匹配且月份匹配所需类型的行。
答案 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
>>>