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)