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

时间:2019-02-08 21:40:11

标签: python pandas dataframe

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

我在SO上找到的方法:

  1. bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0

这对我不起作用,只要数据框中有非数字列即可。我需要先选择列,然后再将非数字列连接起来

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

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

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

我只能用它来累加一列。

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

谢谢。

编辑:

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

示例:

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

Pre Sum

我想得到的是

Sum

请忽略索引的差异。

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

再次感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

要选择数字列,您可以

df_numeric = df.select_dtypes(include = ['int64', 'float64'])
df_num_cols = df_numeric.columns

然后做您首先要做的事情(使用我发现的here

df.loc['Total'] = pd.Series(df[df_num_cols].sum(), index = [df_num_cols])