我试图在数据框的底部创建一行以显示某些列的总和。我印象中这将是一个非常简单的操作,但是令我惊讶的是,我在SO上找到的所有方法都对我没有作用。

我在SO上找到的方法:


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


只要数据框中存在非数字列,这对我就不起作用。我需要先选择列,然后再将非数字列合并


df.append(df.sum(numeric_only=True), ignore_index=True)


这不会保留我的数据类型。整数列将转换为浮点数。


df3.loc['Total', 'ColumnA']= df['ColumnA'].sum()


我只能用它来汇总一列。

我一定在过程中错过了一些东西,因为这并不困难。请让我知道如何在保留数据框的数据类型的同时添加总和行。

谢谢。

编辑:

首先,对于最新更新深表歉意。上周末我在路上

例:

df1 = pd.DataFrame(data = {'CountyID': [77, 95], 'Acronym': ['LC', 'NC'], 'Developable': [44490, 56261], 'Protected': [40355, 35943],
                          'Developed': [66806, 72211]}, index = ['Lehigh', 'Northampton'])


python -  Pandas :添加总行的最佳方法,该行可计算特定(多个)列的总和,同时保留数据类型-LMLPHP

我想要得到的是

python -  Pandas :添加总行的最佳方法,该行可计算特定(多个)列的总和,同时保留数据类型-LMLPHP

请忽略索引的差异。

这对我来说有点棘手,因为我不需要获取“ County ID”列的总和,因为它是针对特定索引的。因此,问题更多是关于获取特定数字列的总和。

再次感谢。

最佳答案

这是一些玩具数据作为示例:

df = pd.DataFrame({'A':[1.0,2.0,3.0],'B':[1,2,3],'C':['A','B','C']})


这样我们就可以保留总和后的dtypes,将它们存储为d

d = df.dtypes


接下来,由于我们只想对数字列求和,因此将numeric_only=True传递给sum(),但遵循与您初次尝试类似的逻辑

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


最后,将DataFrame的dtypes重置为其原始值。

df.astype(d)




         A  B    C
0      1.0  1    A
1      2.0  2    B
2      3.0  3    C
Total  6.0  6  NaN

10-07 13:00
查看更多