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

问题描述 投票:1回答:1

我正在使用动态.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%之间,但即使它们不是固定的。

python-3.x pandas select
1个回答
2
投票

首先选择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)
© www.soinside.com 2019 - 2024. All rights reserved.