如何对同一记录中以相同单词开头的列求和 pandas 列

问题描述 投票:0回答:2

我创建了以下 pandas 数据框:

ds = {'col1' : [1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4],
      'feature1' : [1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4],
      'col2' : [12,3,4,5,4,3,2,3,4,6,7,8,3,3,65,4,3,2,32,1,2,3,4,5,32],
      
      }

df = pd.DataFrame(data=ds)

数据框如下所示:

print(df)
    col1  feature1  col2
0      1         1    12
1      1         1     3
2      1         1     4
3      1         1     5
4      1         1     4
5      1         1     3
6      1         1     2
7      2         2     3
8      2         2     4
9      2         2     6
10     2         2     7
11     3         3     8
12     3         3     3
13     3         3     3
14     3         3    65
15     3         3     4
16     4         4     3
17     4         4     2
18     4         4    32
19     4         4     1
20     4         4     2
21     4         4     3
22     4         4     4
23     4         4     5
24     4         4    32

我需要创建一个新列(称为

sumOfCols
),它是名称以
col
开头的列中包含的值的总和(在上面的示例中,
feature1
列不会包含在计算中) .

生成的数据框将如下所示:

enter image description here

有人可以帮助我吗? 预先感谢。

pandas dataframe sum calculated-columns
2个回答
1
投票

您可以使用正则表达式

filter
列,然后在
sum
axis=1

df["sumOfCols"] = df.filter(regex="^col").sum(axis=1)
    col1  feature1  col2  sumOfCols
0      1         1    12         13
1      1         1     3          4
2      1         1     4          5
3      1         1     5          6
4      1         1     4          5
5      1         1     3          4
6      1         1     2          3
7      2         2     3          5
8      2         2     4          6
9      2         2     6          8
10     2         2     7          9
11     3         3     8         11
12     3         3     3          6
13     3         3     3          6
14     3         3    65         68
15     3         3     4          7
16     4         4     3          7
17     4         4     2          6
18     4         4    32         36
19     4         4     1          5
20     4         4     2          6
21     4         4     3          7
22     4         4     4          8
23     4         4     5          9
24     4         4    32         36

0
投票

另一种可能的解决方案:

df.assign(sum = df[[col for col in df if col.startswith('col')]].sum(1))
© www.soinside.com 2019 - 2024. All rights reserved.