【发布时间】:2021-01-25 14:26:24
【问题描述】:
我有一个数据集如下:
data = {"C1" : ['DDDSSDSSDS','SSDDDSSDDS',
'DDDDDDDDDD','SSSSSSSSSS','SSSSSSSDSS','DDDDDSDDDD','SDDDDDDDDD']}
dt = pd.DataFrame(data)
print(dt)
对于每个字符串,我想获取每个“不间断 S 组”的第一个元素和最后一个元素的位置。例如,对于第一行,我有 'DDDSSDSSDS'(如您所见,我有三组 S)和我的这个“S 组”最喜欢的输出类似于[(3,5),(6,8),(9-10)],它在第一行显示第一、第二和第三个“不间断 S 组”的位置。
所以输出的一个例子可以是:
C1 C2
0 DDDSSDSSDS [(3, 5), (6, 8), (9-10)]
1 SSDDDSSDDS [(0, 2), (5, 7), (9, 10)]
2 DDDDDDDDDD []
3 SSSSSSSSSS [(1, 11)]
4 SSSSSSSDSS [(0, 7), (8, 10)]
5 DDDDDSDDDD [(5, 6)]
6 SDDDDDDDDD [(0, 1)]
我目前的解决方案是:
def split_it(mystring):
x = re.findall('(S*)', mystring)
if x :
return(x)
dt['C2'] = dt['C1'].apply(split_it)
print(dt)
导致以下输出:
0 DDDSSDSSDS [, , , SS, , SS, , S, ]
1 SSDDDSSDDS [SS, , , , SS, , , S, ]
2 DDDDDDDDDD [, , , , , , , , , , ]
3 SSSSSSSSSS [SSSSSSSSSS, ]
4 SSSSSSSDSS [SSSSSSS, , SS, ]
5 DDDDDSDDDD [, , , , , S, , , , , ]
6 SDDDDDDDDD [S, , , , , , , , , , ]
【问题讨论】:
-
到目前为止您尝试过什么? Stack Overflow 不是代码编写服务。
-
看看这篇文章可能有助于解决你的问题towardsdatascience.com/…
-
@Marat 那么,有什么更好的回答工具呢?