以下のような文字列入力を受け取るデータフレームの列値があります。ここで、startIndex は各文字の開始インデックス、終了インデックスは文字列内のその文字の出現の終わり、フラグは文字自体です。
+---+------------------+
| id| Values |
+---+------------------+
|01 | AABBBAA |
|02 | SSSAAAA |
+---+------------------+
以下に示すように、各行の文字列を辞書に変換したいと思います。
+---+--------------------+
| id| Values |
+---+--------------------+
|01 | [{"startIndex":0, |
| | "endIndex" : 1, |
| | "flag" : A }, |
| | {"startIndex":2, |
| | "endIndex" : 4, |
| | "flag" : B }, |
| | {"startIndex":5, |
| | "endIndex" : 6, |
| | "flag" : A }] |
|02 | [{"startIndex":0, |
| | "endIndex" : 2, |
| | "flag" : S }, |
| | {"startIndex":3, |
| | "endIndex" : 6, |
| | "flag" : A }] |
+---+--------------------+-
ディクショナリを構成するための疑似コードがありますが、ループを使用せずに一度にすべての行に適用する方法がわかりません。また、このようなアプローチの問題は、最後のフレーム化された辞書のみがすべての行で上書きされることです
import re
x = "aaabbbbccaa"
xs = re.findall(r"((.)\2*)", x)
print(xs)
start = 0
output = ''
for item in xs:
end = start + (len(item[0])-1)
startIndex = start
endIndex = end
qualityFlag = item[1]
print(startIndex, endIndex, qualityFlag)
start = end+