熊猫:如何对两个特定列之间的(动态)列求和?

时间:2019-01-20 15:11:01

标签: python-3.x pandas select

我正在使用动态.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%之间,因此我需要获取每一列的所有名称,因此可以创建如下内容:

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

随着列名的更改,下面的代码仅对示例 1)有效。所以我需要:1)识别所有列; 2),然后将其求和。

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

1 个答案:

答案 0 :(得分:2)

通过DataFrame.iloc,然后选择sum,选择没有首尾的所有列:

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

或在META之前的DataFrame.drop处删除%sum列:

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)