对pandas中列中的所有元素求和



我在Python数据框架的一列中有一个数据。

1-2 3-4 8-9
4-5 6-2
3-1 4-2 1-4

需要把那一列中所有可用的数据加起来。

我试着应用下面的逻辑,但它不工作的列表列表。

lst=[]
str='5-7 6-1 6-3'
str2 = str.split(' ')
for ele in str2:
lst.append(ele.split('-'))
print(lst)
sum(lst)

谁能告诉我最简单的方法?

我的预期结果应该是:

27
17
15

我想我们可以分割一下

df.col.str.split(' |-').map(lambda x : sum(int(y) for y in x))
Out[149]: 
0    27
1    17
2    15
Name: col, dtype: int64

pd.DataFrame(df.col.str.split(' |-').tolist()).astype(float).sum(1)
Out[156]: 
0    27.0
1    17.0
2    15.0
dtype: float64

使用pd.Series.str.extractall:

df = pd.DataFrame({"col":['1-2 3-4 8-9', '4-5 6-2', '3-1 4-2 1-4']})
print (df["col"].str.extractall("(d+)")[0].astype(int).groupby(level=0).sum())
0    27
1    17
2    15
Name: 0, dtype: int32

使用.str.extractallsum在一个级别:

df['data'].str.extractall('(d+)').astype(int).sum(level=0)

输出:

0
0  27
1  17
2  15

for循环在这里工作得很好,并且应该是高性能的,因为我们正在处理字符串:

使用@HenryYik的样本数据:

df.assign(sum_ = [sum(int(n) for n in ent 
if n.isdigit()) 
for ent in df.col])
Out[1329]: 
col  sum_
0  1-2 3-4 8-9    27
1      4-5 6-2    17
2  3-1 4-2 1-4    15

我敢说,在返回到pandas数据框架之前,将它取出并在Python中工作将会更快。

相关内容

  • 没有找到相关文章

最新更新