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