Подтвердить что ты не робот

Добавление итогов столбцов в Pandas DataFrame

У меня есть DataFrame с числовыми значениями. Каков самый простой способ добавления строки (с заданным значением индекса), которая представляет собой сумму каждого столбца?

4b9b3361

Ответ 1

Чтобы добавить столбец Total, который представляет собой сумму по строке:

df['Total'] = df.sum(axis=1)

Ответ 2

Чтобы добавить строку с итогом столбца:

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

Ответ 3

Один из способов - создать DataFrame с суммами столбцов и использовать DataFrame.append(...). Например:

import numpy as np
import pandas as pd
# Create some sample data
df = pd.DataFrame({"A": np.random.randn(5), "B": np.random.randn(5)}) 
# Sum the columns:
sum_row = {col: df[col].sum() for col in df}
# Turn the sums into a DataFrame with one row with an index of 'Total':
sum_df = pd.DataFrame(sum_row, index=["Total"])
# Now append the row:
df = df.append(sum_df)

Ответ 4

Я сделал это следующим образом:

df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Grand Total']).T])

это добавит столбец итогов для каждой строки:

df = pd.concat([df,pd.DataFrame(df.sum(axis=1),columns=['Total'])],axis=1)

Кажется немного неприятным, чтобы вернуть объект Series (или в ответ выше, dict) обратно в DataFrame, а затем добавить его, но он работает для моей цели.

Похоже, что это должен быть только метод DataFrame - как pivot_table имеет поля.

Возможно, кто-то знает более простой способ.

Ответ 5

Вы можете использовать метод append, чтобы добавить серию с тем же индексом, что и dataframe в dataframe. Например:

df.append(pd.Series(df.sum(),name='Total'))

Ответ 6

Это дает итоговое значение как по строкам, так и по столбцам:

import numpy as np
import pandas as pd


df = pd.DataFrame({'a': [10,20],'b':[100,200],'c': ['a','b']})

df.loc['Column_Total']= df.sum(numeric_only=True, axis=0)
df.loc[:,'Row_Total'] = df.sum(numeric_only=True, axis=1)

print(df)

                 a      b    c  Row_Total
0             10.0  100.0    a      110.0
1             20.0  200.0    b      220.0
Column_Total  30.0  300.0  NaN      330.0