обновить значение столбца в зависимости от условия групповой работы - Pandas - PullRequest
1 голос
/ 30 апреля 2020

У меня есть кадр данных, как показано ниже

Session      slot_num         ID    prob
s1           1                A     0.2
s1           2                B     0.9
s1           2                B     0.4
s1           2                B     0.4
s1           3                C     0.7
s1           4                D     0.8
s1           4                D     0.3
s1           5                E     0.6
s1           6                F     0.5
s1           7                G     0.7
s2           1                A1    0.6
s2           2                B1    0.5
s2           3                C1    1.1
s2           3                C1    0.6
s2           4                D1    0.7
s2           5                E1    0.6
s2           6                F1    0.7
s2           7                G1    1.2
s2           7                G1    0.7

, если Session и slot_num одинаковы, тогда измените идентификатор строк, кроме первой строки, как TBF.

Ожидаемый результат:

Session      slot_num         ID    prob
s1           1                A     0.2
s1           2                B     0.9
s1           2                TBF   0.4
s1           2                TBF   0.4
s1           3                C     0.7
s1           4                D     0.8
s1           4                TBF   0.3
s1           5                E     0.6
s1           6                F     0.5
s1           7                G     0.7
s2           1                A1    0.6
s2           2                B1    0.5
s2           3                C1    1.1
s2           3                TBF   0.6
s2           4                D1    0.7
s2           5                E1    0.6
s2           6                F1    0.7
s2           7                G1    1.2
s2           7                TBF   0.7

1 Ответ

2 голосов
/ 30 апреля 2020

Используйте DataFrame.duplicated для маски с DataFrame.loc для заданных значений по маске:

df.loc[df.duplicated(['Session','slot_num']), 'ID'] = 'TBF'
print (df)
   Session  slot_num   ID  prob
0       s1         1    A   0.2
1       s1         2    B   0.9
2       s1         2  TBF   0.4
3       s1         2  TBF   0.4
4       s1         3    C   0.7
5       s1         4    D   0.8
6       s1         4  TBF   0.3
7       s1         5    E   0.6
8       s1         6    F   0.5
9       s1         7    G   0.7
10      s2         1   A1   0.6
11      s2         2   B1   0.5
12      s2         3   C1   1.1
13      s2         3  TBF   0.6
14      s2         4   D1   0.7
15      s2         5   E1   0.6
16      s2         6   F1   0.7
17      s2         7   G1   1.2
18      s2         7  TBF   0.7
...