我在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.extractall
和sum
在一个级别:
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中工作将会更快。