Pandas:如何对两个特定列之间的列进行求和(动态)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas:如何对两个特定列之间的列进行求和(动态)?相关的知识,希望对你有一定的参考价值。

我正在使用动态.csvs。所以我永远不知道列名是什么。那些例子:

1)

     ETC   META    A       B       C    D    E       %
0    2.0      A  0.0  24.564   0.000  0.0  0.0  -0.00%
1    4.2      B  0.0   2.150   0.000  0.0  0.0   3.55%
2    5.0      C  0.0   0.000  15.226  0.0  0.0   6.14%

2)

  META     A      C     D    E       %
0    A  0.00   0.00  2.90  0.0  -0.00%
1    B  3.00   0.00  0.00  0.0   3.55%
2    C  0.00  21.56  0.00  0.0   6.14%

3)

   FILL   ETC   META     G      F       %
0     T   2.0      A  0.00   6.70  -0.00%
1     F   4.2      B  2.90   0.00   3.55%
2     T   5.0      C  0.00  34.53   6.14%

由于我想在META%之间创建一个包含所有列的SUM的新列,我需要获取每列的所有名称,因此我可以创建类似的东西:

a = df['Total'] = df['A'] + df['B'] + df['C'] + df['D'] + df['E']

随着列名称的更改,下面的代码仅适用于示例1)。所以我需要:1)识别所有列; 2)然后,总结它们。

解决方案必须适用于上述3个示例(1,2和3)。请注意,唯一确定的是列在META%之间,但即使它们不是固定的。

答案

首先选择DataFrame.iloc的所有列,然后选择sum

df['Total'] = df.iloc[:, 1:-1].sum(axis=1)

或者在META之前删除%DataFrame.dropsum列:

df['Total'] = df.drop(['META','%'], axis=1).sum(axis=1)

print (df)
  META    A       B       C    D    E       %   Total
0    A  0.0  24.564   0.000  0.0  0.0  -0.00%  24.564
1    B  0.0   2.150   0.000  0.0  0.0   3.55%   2.150
2    C  0.0   0.000  15.226  0.0  0.0   6.14%  15.226

编辑:您可以选择META%之间的列:

#META, % are not numeric
df['Total'] = df.loc[:, 'META':'%'].sum(axis=1)
#META is not numeric
df['Total'] = df.iloc[:, df.columns.get_loc('META'):df.columns.get_loc('%')].sum(axis=1)

#more general, META is before % column
df['Total'] = df.iloc[:, df.columns.get_loc('META')+1:df.columns.get_loc('%')].sum(axis=1)

以上是关于Pandas:如何对两个特定列之间的列进行求和(动态)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中对两个结果集中的列求和

Pandas:如何根据其他列值的条件对列进行求和?

如何对两个数据框之间的列进行 Wilcoxon 测试

如何对视图中的列进行求和/分组/排序

在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并

使用 pyspark/pandas 使用列名的模式匹配对具有不同列名的多个列值求和