JavaScript
x
3
1
list_Crashes = ['Startup', 'Crash in A', 'Shutdown', 'Crash in B', 'Crash in C', 'Startup', 'Crash in D',
2
'Startup', 'Crash in E', 'Crash in F', 'Crash in G', 'Shutdown', 'Crash in X', 'Crash in Y', 'Crash in Z']
3
I have a table which contains 2 columns. the code will check the previous element of list and look for ( Startup / Shutdown ) : Example : if a Crash is after a Startup ; State column will be filled with Startup in front of that Crash as the table below :
Crashes | State |
---|---|
Crash in A | Startup |
Crash in B | Shutdown |
Crash in C | Shutdown |
Crash in D | Startup |
Crash in E | Startup |
Crash in F | Startup |
Crash in G | Startup |
Crash in X | Shutdown |
Crash in Y | Shutdown |
Crash in Z | Shutdown |
the challenge I’m having is that the letters are random each time so i have to use “Crash in” in my code and not specific letters !
Any suggestions on how to do this?
EDIT : Real life example ( each line is an element of a list) :
JavaScript
1
9
1
12:33:04.1753 | Startup Configuration dazdazdazd
2
12:35:15.0142 | Crash in A <546464>, thread 61
3
12:35:53.0396 | Crash in B <5>, 3e9fc dazdazd
4
12:35:54.1664 | Crash in C <70>,bfc690dasfff
5
12:35:55.3817 | Crash in D <80>,de5484sdazdazd
6
12:36:01.6642 | Crash in E <50>,bfc428fdsfsgdgsgsd
7
12:53:34.6462 | System Shutdown
8
12:53:48.1724 | Exception: Crash in Y <01>, 38310dazdazdafaga
9
Code used from @mozway’s Answer :
JavaScript
1
9
1
def gen(lst):
2
last_non_crash =''
3
for x in lst:
4
if 'Crash in' in x:
5
last_non_crash = x
6
else:
7
yield [x, last_non_crash]
8
dataf = pd.DataFrame(gen(Crashtype), columns = ['Crashes', 'State'])
9
Output :
JavaScript
1
3
1
Crashes State
2
0 12:53:34.6462 | [1230.490] System shutdownn 12:36:01.6642 | Exception: Crash in E<50>,
3
Expected Output :
JavaScript
1
8
1
Crashes State
2
0 Crash in A Startup
3
1 Crash in B Startup
4
2 Crash in C Startup
5
3 Crash in D Startup
6
4 Crash in E Startup
7
5 Crash in Y Shutdown
8
Advertisement
Answer
IIUC, you can use a generator:
JavaScript
1
11
11
1
def gen(lst):
2
last_non_crash = ''
3
for x in lst:
4
if not x.startswith('Crash in'):
5
last_non_crash = x
6
else:
7
yield [x, last_non_crash]
8
9
10
pd.DataFrame(gen(list_Crashes), columns=['Crashes', 'State'])
11
output:
JavaScript
1
12
12
1
Crashes State
2
0 Crash in A Startup
3
1 Crash in B Shutdown
4
2 Crash in C Shutdown
5
3 Crash in D Startup
6
4 Crash in E Startup
7
5 Crash in F Startup
8
6 Crash in G Startup
9
7 Crash in X Shutdown
10
8 Crash in Y Shutdown
11
9 Crash in Z Shutdown
12
input:
JavaScript
1
3
1
list_Crashes = ['Startup', 'Crash in A', 'Shutdown', 'Crash in B', 'Crash in C', 'Startup', 'Crash in D',
2
'Startup', 'Crash in E', 'Crash in F', 'Crash in G', 'Shutdown', 'Crash in X', 'Crash in Y', 'Crash in Z']
3
updated answer
JavaScript
1
15
15
1
import re
2
3
def gen(lst):
4
last_non_crash = ''
5
for x in lst:
6
m = re.search(r'(Crash in w+|Shutdown|Startup)', x)
7
x = m.group() if m else 'unknown'
8
if not 'Crash in' in x:
9
last_non_crash = x
10
else:
11
yield [x, last_non_crash]
12
13
14
pd.DataFrame(gen(list_Crashes), columns=['Crashes', 'State'])
15
output:
JavaScript
1
8
1
Crashes State
2
0 Crash in A Startup
3
1 Crash in B Startup
4
2 Crash in C Startup
5
3 Crash in D Startup
6
4 Crash in E Startup
7
5 Crash in Y Shutdown
8