我创建了以下 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
列不会包含在计算中) .
生成的数据框将如下所示:
有人可以帮助我吗? 预先感谢。
您可以使用正则表达式
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
另一种可能的解决方案:
df.assign(sum = df[[col for col in df if col.startswith('col')]].sum(1))