(Python):DataFrames添加的总行只是一列的总和

时间:2017-10-18 10:58:57

标签: python pandas dataframe

我有一组DataFrames,并希望添加一个总行,该行只对其中一列进行求和(下面的示例表)

我可以使用df.loc['Total']= df.sum()甚至df.loc['Total'] = [df[x].sum() for x in df.columns]添加总列,但是我需要除A以外的所有列以显示空白并且语法存在问题。

Item    A   B   C   D   E   F
1       1   2   3   4   5   6
2       5   10  15  20  25  30
3       10  20  30  40  50  60
4       5   15  25  35  45  55
Total   21  

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:5)

我认为你需要为sum选择列,然后指定输出列:

df.loc['Total', 'A']= df['A'].sum()
print (df)
       Item     A     B     C     D     E     F
0       1.0   1.0   2.0   3.0   4.0   5.0   6.0
1       2.0   5.0  10.0  15.0  20.0  25.0  30.0
2       3.0  10.0  20.0  30.0  40.0  50.0  60.0
3       4.0   5.0  15.0  25.0  35.0  45.0  55.0
Total   NaN  21.0   NaN   NaN   NaN   NaN   NaN

NaN替换为空格是可能的,但是获取混合类型 - 带字符串的数字和某些函数应该失败:

df.loc['Total'] = df[['A']].sum().reindex(df.columns, fill_value='')
print (df)
      Item   A   B   C   D   E   F
0        1   1   2   3   4   5   6
1        2   5  10  15  20  25  30
2        3  10  20  30  40  50  60
3        4   5  15  25  35  45  55
Total       21       

如果需要将值附加到2列,则需要指定值列表:

df.loc[len(df), ['Item','A']]= ['Total', df['A'].sum()]
print (df)
    Item     A     B     C     D     E     F
0      1   1.0   2.0   3.0   4.0   5.0   6.0
1      2   5.0  10.0  15.0  20.0  25.0  30.0
2      3  10.0  20.0  30.0  40.0  50.0  60.0
3      4   5.0  15.0  25.0  35.0  45.0  55.0
4  Total  21.0   NaN   NaN   NaN   NaN   NaN

答案 1 :(得分:1)

使用append

In [3884]: s = pd.Series({'Item': 'Total', 'A': df['A'].sum()}, 
                         index=df.columns).fillna('')

In [3885]: df.append(s, ignore_index=True)
Out[3885]:
    Item   A   B   C   D   E   F
0      1   1   2   3   4   5   6
1      2   5  10  15  20  25  30
2      3  10  20  30  40  50  60
3      4   5  15  25  35  45  55
4  Total  21

轻松返回副本

详细

In [3886]: df
Out[3886]:
   Item   A   B   C   D   E   F
0     1   1   2   3   4   5   6
1     2   5  10  15  20  25  30
2     3  10  20  30  40  50  60
3     4   5  15  25  35  45  55

In [3887]: s
Out[3887]:
Item    Total
A          21
B
C
D
E
F
dtype: object