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

Python 3.x 熊猫:如何对两个特定列之间的(动态)列求和?,python-3.x,pandas,select,Python 3.x,Pandas,Select,我正在使用动态.csvs。所以我永远不知道列名会是什么。例如: (一) (二) (三) 由于我想用META和%之间的所有列的总和创建一个新列,因此我需要获得每个列的所有名称,这样我就可以创建如下内容: a = df['Total'] = df['A'] + df['B'] + df['C'] + df['D'] + df['E'] 随着列名称的更改,下面的代码将仅适用于示例1)。所以我需要:1)识别所有列;2) 然后,把它们加起来 解决方案必须适用于上述3个示例(1、2和3)。 请注意,唯一确

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

(一)

(二)

(三)

由于我想用
META
%
之间的所有列的总和创建一个新列,因此我需要获得每个列的所有名称,这样我就可以创建如下内容:

a = df['Total'] = df['A'] + df['B'] + df['C'] + df['D'] + df['E']
随着列名称的更改,下面的代码将仅适用于示例1)。所以我需要:1)识别所有列;2) 然后,把它们加起来

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

选择所有不带first和last by的列,然后选择
sum

df['Total'] = df.iloc[:, 1:-1].sum(axis=1)
df['Total'] = df.drop(['META','%'], axis=1).sum(axis=1)
或者在
sum
之前删除
META
%
列:

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

编辑:您可以选择
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)

你知道这必须适用于上面的3个例子吗?@rafasalo-我想是的。对不起,在你的回答之后,我想到了一个有时会出现的场景,我认为你的回答不起作用。即使每一列都不在同一位置,请再看一看。对不起that@rafasalo-是的,因此使用
drop
的解决方案应该有效(如果可能,
Total
META
是数字),如果从不使用数字,则使用
df['Total']=df.sum(axis=1)
META不是数字,但前面的列是数字。所以你的解决方案是求和。
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, % 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)