Good evening,
I have an m by n table with a column called p. How can I get all 1 row per unique p value into a new table i by j?
Example:
a b c p d
1 2 1 1 'aab'
1 1 1 2 'aac'
3 3 1 2 'aad'
3 2 2 3 'aag'
would become:
a b c p d
1 2 1 1 'aab'
1 1 1 2 'aac'
3 2 2 3 'aag'
I’ve broken down the first table into a list of lists but I can’t come up with a method for deleting the 3rd row in the table to get the new table.
Any help is much appreciated.
listIn = [[1, 2, 1, 1, 'aab'],
[1, 1, 1, 2, 'aac'],
[3, 3, 1, 2, 'aad'],
[3, 2, 2, 3, 'aag']]
existsList =[]
listOut =[]
for row in listIn
if row[3] not in existsList:
existsList.append(row[3])
listOut.append(row)
print listOut
3 Likes
If you are running with very large datasets, use a set
or dict
instead of a list
for tracking existence.
output = []
seen = set()
for keyID, line, verName, modelDescrip, menGrp, staNo, seq, workCell, t_Sec, mCode, description, key_Point, quality_Chk, partNo, partName, scan, scan_req, pic, videoFileName, userAck in tbl:
if seq in seen:
continue
output.append([keyID, line, verName, modelDescrip, menGrp, staNo, seq, workCell, t_Sec, mCode, description, key_Point, quality_Chk, partNo, partName, scan, scan_req, pic, videoFileName, userAck])
seen.add(seq)
A user on Stackoverflow was able to come up with the above code but I like yours better and will probably implement it at some point this weekend.
At the end of the day I don’t think it will be ever going over 100 rows but there is no rule stating they can’t have 10k rows i guess.
The code from Stackoverflow is using tuple unpacking to place the data into named variables. While handy if you have complex expressions to do, it is pointless in your case. I do like the use of continue for loop short-circuit and the use of the set. I would blend the two implementations.
1 Like
Took me a while to understand what you meant about unpacking tuples but after reading about Python collections (arrays), Ignition Datasets, and Ignition PyDataSets I have a better understanding of how all the pieces fit together. Thanks for the insight.
output = []
seen = set()
for row in tbl:
if row['seq'] in seen:
continue
output.append(list(row))
seen.add(row['seq'])
2 Likes