Почему df.cumsum () дает ValueError: неправильно передано количество элементов, размещение подразумевает 1 - PullRequest
1 голос
/ 19 октября 2019

Я хотел бы создать новый столбец с именем total_amount, основанный на сумме каждой суммы в каждой группе. Я бы хотел, чтобы окончательный набор данных выглядел так, как показано ниже.

компания |количество |total_amount

компания 1 |10000 |10000

компания 1 |20000 |30000

компания 1 |30000 |60000

компания 2 |10000 |10000

компания 2 |20000 |30000

компания 3 |10000 |10000

компания 4 |10000 |10000

компания 4 |20000 |20000

компания 5 |10000 |10000

компания 5 |20000 |30000

компания 5 |30000 |60000

компания 5 |40000 |100000


Я запустил этот код

 df['total_amount'] = df.groupby('company').cumsum()

, и он работал недолго, но когда я попытался изменить его позицию, чтобы сделать мой код более читабельным, он начал давать мне KeyError "total_amount"и ошибка значения, указанная выше. Что я делаю не так?

1 Ответ

0 голосов
/ 19 октября 2019

Указывает cumsum возвращает более 1 столбца. Другими словами, df.groupby('company').cumsum() вызывает cumsum для DataFrameGroupby объекта, поэтому возвращает фрейм данных. Если возвращенный фрейм данных - только 1 столбец, назначение все еще работает. Однако, если возвращенный фрейм данных имеет 2 или более столбцов, он потерпит неудачу, как указано выше. Я подозреваю, что ваш первый запуск возвращает 1-колоночный фрейм данных, так что это сработалоОднако при первом запуске был создан дополнительный столбец. При следующих запусках он возвращает фрейм данных n-столбцов, поэтому назначение не удалось.

Попробуйте исправить эту ошибку:

df['total_amount'] = df.groupby('company')['amount'].cumsum()
...