Цель
У меня есть фрейм данных Pandas, как показано ниже, с несколькими столбцами, и я хотел бы получить общее количество столбцов MyColumn
.
Фрейм данных -df
:
print df
X MyColumn Y Z
0 A 84 13.0 69.0
1 B 76 77.0 127.0
2 C 28 69.0 16.0
3 D 28 28.0 31.0
4 E 19 20.0 85.0
5 F 84 193.0 70.0
Моя попытка :
Я попытался получить сумму столбца, используя groupby
и .sum()
:
Total = df.groupby['MyColumn'].sum()
print Total
Это вызывает следующую ошибку:
TypeError: 'instancemethod' object has no attribute '__getitem__'
Ожидаемый результат
Я ожидал, что результат будет следующим:
319
Или, в качестве альтернативы, я хотел бы, df
чтобы меня отредактировали с новым row
заголовком, TOTAL
содержащим общую сумму:
X MyColumn Y Z
0 A 84 13.0 69.0
1 B 76 77.0 127.0
2 C 28 69.0 16.0
3 D 28 28.0 31.0
4 E 19 20.0 85.0
5 F 84 193.0 70.0
TOTAL 319
Ответы:
Вам следует использовать
sum
:Затем вы используете
loc
withSeries
, в этом случае индекс должен быть таким же, как и конкретный столбец, который вам нужно суммировать:потому что, если вы передадите скаляр, значения всех строк будут заполнены:
Два других решения есть
at
, иix
смотрите приложения ниже:Примечание. Начиная с Pandas v0.20,
ix
не рекомендуется. Используйтеloc
илиiloc
вместо.источник
.loc
делает в приведенном выше примере?loc
предназначен для настройки с увеличением .at
работает и для настройки с увеличением, см. последнее изменение.The .loc/.ix/[] operations can perform enlargement when setting a non-existant key for that axis.
, такloc
илиix
иначе[]
. в следующем разделе написаноat may enlarge the object in-place as above if the indexer is missing.
Итак, все методы хороши, ноat
я думаю, что они самые быстрые.Другой вариант, который вы можете использовать здесь:
Вы также можете использовать
append()
метод:Обновить:
Если вам нужно добавить сумму для всех числовых столбцов, вы можете сделать одно из следующих действий:
Используйте,
append
чтобы сделать это функционально (не меняет исходный фрейм данных):Используйте
loc
для изменения фрейма данных на месте:источник
Подобно получению длины фрейма данных,
len(df)
для pandas и blaze работало следующее:или альтернативно
источник
Если в этом есть какая-то проблема, пожалуйста, поправьте меня.
источник
В качестве другого варианта вы можете сделать что-то вроде ниже
Ниже скрипт вы можете использовать для вышеуказанных данных
источник