获取 Pandas 列的总数

2025-04-15 09:19:00
admin
原创
27
摘要:问题描述:我有一个 Pandas 数据框,如下所示,其中包含多列,并且想要获取列的总数MyColumn。 X MyColumn Y Z 0 A 84 13.0 ...

问题描述:

我有一个 Pandas 数据框,如下所示,其中包含多列,并且想要获取列的总数MyColumn

           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   

预期输出

我原本期望输出是此列的总数: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

我尝试使用groupby和来获取列的总和.sum()

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

这会导致以下错误:

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

解决方案 1:

您应该使用sum

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

然后使用locwith 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代替。

解决方案 2:

您还可以选择以下选项:

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

解决方案 3:

与获取数据框的长度类似len(df),以下内容适用于 pandas 和 blaze:

Total = sum(df['MyColumn'])

或者

Total = sum(df.MyColumn)
print Total

解决方案 4:

有两种方法可以对列求和

数据集 = pd.read_csv(“data.csv”)

1:总和(数据集.列名)

2:数据集['Column_Name'].sum()

如果其中有任何问题,请纠正我。

解决方案 5:

作为其他选择,您可以执行以下操作

Group   Valuation   amount
    0   BKB Tube    156
    1   BKB Tube    143
    2   BKB Tube    67
    3   BAC Tube    176
    4   BAC Tube    39
    5   JDK Tube    75
    6   JDK Tube    35
    7   JDK Tube    155
    8   ETH Tube    38
    9   ETH Tube    56

您可以使用下面的脚本来处理上述数据

import pandas as pd    
data = pd.read_csv("daata1.csv")
bytreatment = data.groupby('Group')
bytreatment['amount'].sum()

解决方案 6:

多列总计

您可以选择要计算总计的列并调用sum()它们。要添加新行,请使用loc[]

df.loc['Total'] = df[['Y', 'Z']].sum()

使用 OP 中的示例,它进行了以下转换(注意新添加的行):

结果


Python 内置方法sumvs Pandassum方法

对于单列,我们可以通过两种方式求和:使用 Python 的内置sum()函数和使用 Pandas 的sum()方法。需要注意的是,Pandas 的方法经过优化,比 Python 的方法快得多sum()。例如,要对一列包含 100 万行的数据求和,Pandas 的 sum 方法比 Python 的内置函数快约 160 倍sum()

df = pd.DataFrame({'Y': range(1000000)})

%timeit a = df['Y'].sum()
# 1 ms ± 143 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit b = sum(df['Y'])
# 160 ms ± 6.1 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

因此尽可能使用熊猫的方法。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用