У меня есть DataFrame с числовыми значениями. Каков самый простой способ добавления строки (с заданным значением индекса), которая представляет собой сумму каждого столбца?
Добавление итогов столбцов в Pandas DataFrame
Ответ 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