Pandas:如何对两个特定列之间的列进行求和(动态)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas:如何对两个特定列之间的列进行求和(动态)?相关的知识,希望对你有一定的参考价值。
我正在使用动态.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
和%
之间,但即使它们不是固定的。
答案
首先选择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)
以上是关于Pandas:如何对两个特定列之间的列进行求和(动态)?的主要内容,如果未能解决你的问题,请参考以下文章