Ошибка индексирования в панд
Я не могу найти здесь ошибку в индексации. Я уверен, что это какая-то глупая ошибка. Я хочу установить значения ' 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 ответ:
Вот как вы будете выполнять задание:
Преобразование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
в этих местах индекса на нулевое значение.