将列总计追加到Pandas DataFrame

时间:2013-12-27 17:03:04

标签: python pandas

我有一个带数值的DataFrame。附加行(具有给定索引值)表示每列总和的最简单方法是什么?

7 个答案:

答案 0 :(得分:59)

添加Total列,该列是整行的总和:

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

答案 1 :(得分:57)

添加列总计的行:

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

答案 2 :(得分:6)

一种方法是使用列总和创建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)

答案 3 :(得分:3)

我这样做了:

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然后追加它似乎有点烦人,但它确实适用于我的目的。< / p>

看起来这应该只是DataFrame的方法 - 就像pivot_table有边距一样。

也许有人知道一种更简单的方法。

答案 4 :(得分:0)

您可以使用append方法将与数据框具有相同索引的系列添加到数据框。例如:

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

答案 5 :(得分:0)

这给出了行和列的总计:

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

答案 6 :(得分:0)

  1. 计算总和并将结果转换为列表(轴= 1:行和,轴= 0:列和)
  2. 将步骤1的结果添加到具有新名称的现有dataFrame中
new_sum_col = list(df.sum(axis=1))
df['new_col_name'] = new_sum_col