Python 带if条件的熊猫群比

Python 带if条件的熊猫群比,python,pandas,Python,Pandas,我有下面的数据框架,里面有发票数据。我想根据下面的逻辑添加主代码 1-第一组由票证id和id组成。如果级别为零,则主代码应为零。如果不是code,则应取级别的零 +-----------+----+-------+------+ | ticket_id | id | level | code | +-----------+----+-------+------+ | 1 | 0 | 0 | 1710 | | 1 | 0 | 1 | 372 |

我有下面的数据框架,里面有发票数据。我想根据下面的逻辑添加主代码

1-第一组由
票证id
id
组成。如果
级别
为零,则主代码应为零。如果不是
code
,则应取
级别的

+-----------+----+-------+------+
| ticket_id | id | level | code |
+-----------+----+-------+------+
|         1 |  0 |     0 | 1710 |
|         1 |  0 |     1 |  372 |
|         1 |  0 |     2 |  607 |
|         1 |  1 |     0 | 1727 |
|         1 |  1 |     1 |  370 |
|         1 |  1 |     2 |  607 |
|         2 |  0 |     0 |  269 |
|         2 |  0 |     1 |  371 |
|         2 |  0 |     2 |  607 |
|         2 |  1 |     0 |  277 |
|         2 |  1 |     1 |  371 |
|         2 |  1 |     2 |  607 |
+-----------+----+-------+------+
到目前为止,我已经编写了以下代码

df.groupby(['ticket\u id','id'])['code'].transform(lambda x:if-df['level']==0,0,df['code'])

但我没能把正确的答案弄出来

我想要的输出如下

+-----------+----+-------+------+----------+
| ticket_id | id | level | code | MainCode |
+-----------+----+-------+------+----------+
|         1 |  0 |     0 | 1710 |        0 |
|         1 |  0 |     1 |  372 |     1710 |
|         1 |  0 |     2 |  607 |     1710 |
|         1 |  1 |     0 | 1727 |        0 |
|         1 |  1 |     1 |  370 |     1727 |
|         1 |  1 |     2 |  607 |     1727 |
|         2 |  0 |     0 |  269 |        0 |
|         2 |  0 |     1 |  371 |      269 |
|         2 |  0 |     2 |  607 |      269 |
|         2 |  1 |     0 |  277 |        0 |
|         2 |  1 |     1 |  371 |      277 |
|         2 |  1 |     2 |  607 |      277 |
+-----------+----+-------+------+----------+

请指导我解决此问题。

您可以检查
级别
中的哪些值不同于
0
,并将布尔结果与相应组的第一个值相乘,这可以通过使用
第一个
进行计算和聚合得到:

df['MainCode'] = (df.level.ne(0)
                    .mul(df.groupby(['ticket_id','id']).code
                    .transform('first')))

    ticket_id  id  level  code  MainCode
0           1   0      0  1710         0
1           1   0      1   372      1710
2           1   0      2   607      1710
3           1   1      0  1727         0
4           1   1      1   370      1727
5           1   1      2   607      1727
6           2   0      0   269         0
7           2   0      1   371       269
8           2   0      2   607       269
9           2   1      0   277         0
10          2   1      1   371       277
11          2   1      2   607       277

太棒了。这很好用。这是我第一次遇到
Dataframe.ne
方法。让我深入了解一下。。