Объяснение того, почему ваш код не работал: обратите внимание, что df[df['state'] == x]['n_killed'].sum()
- это одиночное число с плавающей точкой. Поэтому, когда вы попытаетесь присвоить одно значение с плавающей точкой столбцу Deaths['Total Deaths']
, он добавит в этот столбец список с тем же номером с плавающей запятой. Поскольку вы реализуете его в для l oop, из-за обновления будет назначен только последний state
.
Простое исправление может быть:
for x in States:
Deaths.loc[x,'Total Deaths'] = df[df['state'] == x]['n_killed'].sum()
В качестве альтернативы, если вы Если вы хотите использовать groupby
, вы можете сначала выбрать те состояния, которые вас интересуют:
df = df[df['state'].isin(States)]
И сумма по 'n_killed'
, сгруппированная по 'state'
df1=df.groupby('state').agg({'n_killed':'sum'})
И затем объединили его с вашим фреймом данных Deaths
Deaths=Deaths.merge(df1,left_on='States',right_on=df1.index)
Поскольку у меня нет доступа к вашим данным, проверить правильность невозможно. Пожалуйста, измените коды при необходимости.