Ошибка индексирования в панд


Я не могу найти здесь ошибку в индексации. Я уверен, что это какая-то глупая ошибка. Я хочу установить значения ' td ' для тех строк, размер блока которых равен 1. Сначала я нахожу такие строки, а затем использую эти индексы, чтобы установить значения столбца " td " в 0. Вот пример набора данных. Здесь, кроме блока № 5,7,8, все остальные значения блока должны быть установлены в 0 в столбце 'td'.

    Sid     Itemid  Block       td
0     1  214536502      1  180.591
1     1  214536500      2    37.13
2     1  214536506      3  133.308
3     1  214577561      4      NaN
4     2  214662742      5   41.759
5     2  214662742      5   78.073
6     3  214576500      6      NaN
7     4  214821275      7   26.002
8     4  214821275      7   28.199
9     5  214821371      8   42.289
10    5  214821371      8   45.193

Вот мой код. Я получаю неожиданный результат.

j=k.groupby('Block').Sid.count()==1
te=k['Block'][j[j].index].index
k['td'][te]=0

Ожидается Выход -

    Sid     Itemid  Block       td
0     1  214536502      1       0
1     1  214536500      2       0
2     1  214536506      3       0
3     1  214577561      4       0
4     2  214662742      5   41.759
5     2  214662742      5   78.073
6     3  214576500      6       0
7     4  214821275      7   26.002
8     4  214821275      7   28.199
9     5  214821371      8   42.289
10    5  214821371      8   45.193
1 2

1 ответ:

Вот как вы будете выполнять задание:

k.ix[(k.groupby('Block').Sid.transform('count') == 1), 'td'] = 0

>>> k
    Sid     Itemid  Block      td
0     1  214536502      1   0.000
1     1  214536500      2   0.000
2     1  214536506      3   0.000
3     1  214577561      4   0.000
4     2  214662742      5  41.759
5     2  214662742      5  78.073
6     3  214576500      6   0.000
7     4  214821275      7  26.002
8     4  214821275      7  28.199
9     5  214821371      8  42.289
10    5  214821371      8  45.193
Преобразование

Возвращает ряд такой же длины, как и фрейм данных. Затем найдите те, которые равны единице, и используйте loc, чтобы установить столбец td в этих местах индекса на нулевое значение.