获取总计pandas列

发布于 2021-01-29 18:58:56

目标

我有一个Pandas数据框,如下所示,具有多个列,并希望获取列的总数MyColumn


数据框 -df

print df

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0

我的尝试

我试图使用groupby和获得列的总和.sum()

Total = df.groupby['MyColumn'].sum()

print Total

这将导致以下错误:

TypeError: 'instancemethod' object has no attribute '__getitem__'

预期产量

我期望输出如下:

319

或者,我想df编辑一个包含总数的新row标题TOTAL

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   
TOTAL                  319
关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您应该使用sum

    Total = df['MyColumn'].sum()
    print (Total)
    319
    

    然后loc与配合使用Series,在这种情况下,索引应设置为与需要求和的特定列相同:

    df.loc['Total'] = pd.Series(df['MyColumn'].sum(), index = ['MyColumn'])
    print (df)
             X  MyColumn      Y      Z
    0        A      84.0   13.0   69.0
    1        B      76.0   77.0  127.0
    2        C      28.0   69.0   16.0
    3        D      28.0   28.0   31.0
    4        E      19.0   20.0   85.0
    5        F      84.0  193.0   70.0
    Total  NaN     319.0    NaN    NaN
    

    因为如果传递标量,则将填充所有行的值:

    df.loc['Total'] = df['MyColumn'].sum()
    print (df)
             X  MyColumn      Y      Z
    0        A        84   13.0   69.0
    1        B        76   77.0  127.0
    2        C        28   69.0   16.0
    3        D        28   28.0   31.0
    4        E        19   20.0   85.0
    5        F        84  193.0   70.0
    Total  319       319  319.0  319.0
    

    另有两个解决方案atix请参见以下应用程序:

    df.at['Total', 'MyColumn'] = df['MyColumn'].sum()
    print (df)
             X  MyColumn      Y      Z
    0        A      84.0   13.0   69.0
    1        B      76.0   77.0  127.0
    2        C      28.0   69.0   16.0
    3        D      28.0   28.0   31.0
    4        E      19.0   20.0   85.0
    5        F      84.0  193.0   70.0
    Total  NaN     319.0    NaN    NaN
    

    df.ix['Total', 'MyColumn'] = df['MyColumn'].sum()
    print (df)
             X  MyColumn      Y      Z
    0        A      84.0   13.0   69.0
    1        B      76.0   77.0  127.0
    2        C      28.0   69.0   16.0
    3        D      28.0   28.0   31.0
    4        E      19.0   20.0   85.0
    5        F      84.0  193.0   70.0
    Total  NaN     319.0    NaN    NaN
    

    注意: 自Pandas v0.20起,ix已弃用。使用lociloc代替。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看