获取 Pandas 列的总数

新手上路,请多包涵

我有一个 Pandas 数据框,如下所示,它有多个列,并且想获得列的总数 MyColumn

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 使用标题为 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

原文由 Enigmatic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
2 个回答

您应该使用 sum

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

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

 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

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以在这里选择另一个选项:

 df.loc["Total", "MyColumn"] = df.MyColumn.sum()

#         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


您还可以使用 append() 方法:

 df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))

在此处输入图像描述


更新:

如果您需要为所有 数字 列附加总和,您可以执行以下操作之一:

使用 append 以功能方式执行此操作(不更改原始数据框):

 # select numeric columns and calculate the sums
sums = df.select_dtypes(pd.np.number).sum().rename('total')

# append sums to the data frame
df.append(sums)
#         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  400.0  398.0

使用 loc 就地改变数据框:

 df.loc['total'] = df.select_dtypes(pd.np.number).sum()
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     638.0  800.0  796.0

原文由 Psidom 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题