Панды: Использование «Добавить» добавляет новый столбец и делает еще один весь NaN - PullRequest
0 голосов
/ 08 октября 2018

Я только начал изучать панд неделю назад или около того, и сейчас я немного борюсь с фреймом данных панд.Мои данные выглядят так:

State    NY   CA   Other  Total
Year
2003    450   50    25      525
2004    300   75     5      380
2005    500  100   100      700
2006    250   50   100      400 

Я создал эту таблицу из набора данных, который включал 30 или около того значений для переменной, которую я представляю здесь как State.Если в данном примере это не Нью-Йорк или Калифорния, я суммировал их и поместил в категорию «Другие».Годы здесь были сделаны из нормализованного списка дат (первоначально mm / dd / yyyy и yyyy-mm-dd) как таковые, если это способствует моей проблеме:

dict = {'Date': pd.to_datetime(my_df.Date).dt.year}

и позже:

my_df = my_df.rename_axis('Year')

Сейчас я пытаюсь добавить строку внизу, которая показывает итоги в каждой категории:

final_df = my_df.append({'Year' : 'Total',
                         'NY': my_df.NY.sum(), 
                         'CA': my_df.CA.sum(), 
                         'Other': my_df.Other.sum(), 
                         'Total': my_df.Total.sum()}, 
                          ignore_index=True)

Технически это работает, но из-за этого моя таблица выглядит так:

         NY   CA   Other  Total  State
0       450   50    25      525    NaN
1       300   75     5      380    NaN
2       500  100   100      700    NaN
3       250   50   100      400    NaN
4         a    b     c        d   Total

(«а» и т. Д. Являются фактическими суммами столбцов.) В начале столбец добавляется, а в конце - столбец «Год».Фактически, он также удаляет метку «Дата» и превращает все годы в последнем столбце в NaN.

Можно ли как-нибудь правильно отформатировать это?Спасибо за ваше время.

1 Ответ

0 голосов
/ 08 октября 2018

Я думаю, вам нужно создать Series от sum и rename it:

final_df = my_df.append(my_df.sum().rename('Total'))
print (final_df)
         NY   CA  Other  Total
State                         
2003    450   50     25    525
2004    300   75      5    380
2005    500  100    100    700
2006    250   50    100    400
Total  1500  275    230   2005

Другое решение - использовать loc для setting with enlargement:

my_df.loc['Total'] = my_df.sum()
print (my_df)
         NY   CA  Other  Total
State                         
2003    450   50     25    525
2004    300   75      5    380
2005    500  100    100    700
2006    250   50    100    400
Total  1500  275    230   2005

Другая идея из предыдущего ответа - добавить параметры margins=True и margins_name='Total' в crosstab:

df1 = df.assign(**dct)
out = (pd.crosstab(df1['Firing'], df1['State'], margins=True, margins_name='Total'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...