我试图在数据框的底部创建一行以显示某些列的总和。我印象中这将是一个非常简单的操作,但是令我惊讶的是,我在SO上找到的所有方法都无法一步一步地为我工作。
我在SO上找到的方法:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0
这对我不起作用,只要数据框中有非数字列即可。我需要先选择列,然后再将非数字列连接起来
df.loc['TOTAL'] = df.sum()
这不会保留我的数据类型。整数列将转换为浮点数。
df.append(df.sum(numeric_only=True), ignore_index=True)
我只能用它来累加一列。
我一定在过程中错过了一些东西,因为这并不是一件难事。请让我知道如何在保留数据框的数据类型的同时添加总和行。
谢谢。
编辑:
首先,对于最新更新,我们深表歉意。我上个周末在路上
示例:
df3.loc['Total', 'ColumnA']= df['ColumnA'].sum()
我想得到的是
请忽略索引的差异。
这对我来说有点棘手,因为我不需要获取“县ID”列的总和,因为它是用于特定索引的。因此,问题更多是关于获取特定数字列的总和。
再次感谢。
答案 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])