Панды: лучший способ добавить итоговую строку, которая вычисляет сумму конкретных (нескольких) столбцов при сохранении типа данных - PullRequest
0 голосов
/ 09 февраля 2019

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

Методы, которые я нашел на SO:

  1. df.loc['TOTAL'] = df.sum()

Это не работает для меня, пока нетчисловые столбцы в кадре данных.Мне нужно сначала выбрать столбцы, а затем объединить нечисловые столбцы обратно

df.append(df.sum(numeric_only=True), ignore_index=True)

Это не сохранит мои типы данных.Целочисленный столбец будет преобразован в число с плавающей точкой.

df3.loc['Total', 'ColumnA']= df['ColumnA'].sum()

Я могу использовать это только для суммирования одного столбца.

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

Спасибо.

Редактировать:

Во-первых, извините за позднее обновление,Я был в дороге в прошлые выходные

Пример:

df1 = pd.DataFrame(data = {'CountyID': [77, 95], 'Acronym': ['LC', 'NC'], 'Developable': [44490, 56261], 'Protected': [40355, 35943], 
                          'Developed': [66806, 72211]}, index = ['Lehigh', 'Northampton'])

Pre Sum

То, что я хочу получить, будет

Sum

Пожалуйста, не обращайте внимания на различия в индексе.

Это немного сложно для меня, потому что мне не нужно получать сумму застолбец «Идентификатор округа», поскольку он предназначен для конкретной индексации.Так что вопрос больше в получении суммы конкретных числовых столбцов.

Еще раз спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вот некоторые игрушечные данные, которые можно использовать в качестве примера:

df = pd.DataFrame({'A':[1.0,2.0,3.0],'B':[1,2,3],'C':['A','B','C']})

Чтобы мы могли сохранить dtypes после суммы, мы будем хранить их как d

d = df.dtypes

Далее, поскольку мы хотим только суммировать числовые столбцы, передайте numeric_only=True в sum(), но следуйте логике, аналогичной вашей первой попытке

df.loc['Total'] = df.sum(numeric_only=True)

И, наконец, сбросьте dtypes вашегоDataFrame к своим исходным значениям.

df.astype(d)

         A  B    C
0      1.0  1    A
1      2.0  2    B
2      3.0  3    C
Total  6.0  6  NaN
0 голосов
/ 09 февраля 2019

Чтобы выбрать числовые столбцы, вы можете сделать

df_numeric = df.select_dtypes(include = ['int64', 'float64'])
df_num_cols = df_numeric.columns

Затем сделать то, что вы сделали в первую очередь (используя то, что я нашел здесь )

df.loc['Total'] = pd.Series(df[df_num_cols].sum(), index = [df_num_cols])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...