Общая строка данных панд

У меня есть dataframe, что-то вроде:

foo bar qux 0 a 1 3.14 1 b 3 2.72 2 c 2 1.62 3 d 9 1.41 4 e 3 0.58 

и я хотел бы добавить строку «total» в конец фрейма данных:

  foo bar qux 0 a 1 3.14 1 b 3 2.72 2 c 2 1.62 3 d 9 1.41 4 e 3 0.58 5 tot 15 9.47 

Я попытался использовать команду sum но в итоге у меня есть серия, которая, хотя я могу преобразовать обратно в Dataframe, не поддерживает типы данных:

 tot_row = pd.DataFrame(df.sum()).T tot_row['foo'] = 'tot' tot_row.dtypes: foo object bar object qux object 

Я хотел бы сохранить типы данных из исходного фрейма данных, так как мне нужно применить другие операции к общей строке, например:

 baz = 2*tot_row['qux'] + 3*tot_row['bar'] 

4 Solutions collect form web for “Общая строка данных панд”

Добавить итоговую строку с

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

Преобразование необходимо, только если у вас есть столбец строк или объектов.

Это немного хрупкое решение, поэтому я бы рекомендовал придерживаться операций с DataFrame. например.

 baz = 2*df['qux'].sum() + 3*df['bar'].sum() 

См. http://pandas.pydata.org/pandas-docs/stable/reshaping.html для полей = True. Это добавляет «Все», чтобы отобразить сумму строк и столбцов.

Альтернативный способ (проверен на Pandas 0.18.1):

 import numpy as np total = df.apply(np.sum) total['foo'] = 'tot' df.append(pd.DataFrame(total.values, index=total.keys()).T, ignore_index=True) 

Результат:

  foo bar qux 0 a 1 3.14 1 b 3 2.72 2 c 2 1.62 3 d 9 1.41 4 e 3 0.58 5 tot 18 9.47 

После этого мне помогли добавить общее количество столбцов и итоговую строку в кадр данных.

Предположим, что dft1 является вашим исходным фреймворком данных … теперь добавьте общий итог столбца и общую строку с помощью следующих шагов.

 from io import StringIO import pandas as pd #create dataframe string dfstr = StringIO(u""" a;b;c 1;1;1 2;2;2 3;3;3 4;4;4 5;5;5 """) #create dataframe dft1 from string dft1 = pd.read_csv(dfstr, sep=";") ## add a column total to dft1 dft1['Total'] = dft1.sum(axis=1) ## add a row total to dft1 with the following steps sum_row = dft1.sum(axis=0) #get sum_row first dft1_sum=pd.DataFrame(data=sum_row).T #change it to a dataframe dft1_sum=dft1_sum.reindex(columns=dft1.columns) #line up the col index to dft1 dft1_sum.index = ['row_total'] #change row index to row_total dft1.append(dft1_sum) # append the row to dft1 
Python - лучший язык программирования в мире.