input = {'id': ['uid1', 'uid2'],
'code': ['A:D;X:X;Y:E;R:Name;P:3;R:Name2;P:1;Z:3', 'B:1,B:2,R:SomeName,P:1,R:SomeName_Z,P:0,M:1,M:3'],
'values': [';;;;1.0;2.0;3.0;;;0.5;0.1;1.5;;;', ';;;1.5;1.1;1.4;;;4.1;3.2;3.3;;;;'],
'reference': [['Name', 'Name2'], ['SomeName', 'SomeName_Z']]}
df = pd.DataFrame(data=input, index=[0, 1])
id code values reference
0 uid1 A:D;X:X;Y:E;R:Name;P:3;R:Name2;P:1;Z:3 ;;;;1.0;2.0;3.0;;;0.5;0.1;1.5;;; [Name, Name2]
1 uid2 B:1,B:2,R:SomeName,P:1,R:SomeName_Z,P:0,M:1,M:3 ;;;1.5;1.1;1.4;;;4.1;3.2;3.3;;;; [SomeName, SomeName_Z]
Я застрял на этапе, когда мне нужно сопоставить каждую ссылку с тремя значениями. Логика поиска этих трех значений следующая:
- Элементы в столбцах кода/значений разделяются ;. Каждый элемент в коде будет иметь одно значение в столбце значений.
- Если в столбце кода есть R:, а следующим элементом является P : тогда P: будет иметь 4 значения в столбце значений, первые 3 значения будут десятичными, а четвертое будет пустым. Нам нужно присвоить эти три значения заданному R: и поместить их в первый, второй, третий столбец.
id code values reference first second third
0 uid1 A:D;X:X;Y:E;R:Name;P:3;R:Name2;P:1;Z:3 ;;;;1.0;2.0;3.0;;;0.5;0.1;1.5;;; Name 1.0 2.0 3.0
1 uid1 A:D;X:X;Y:E;R:Name;P:3;R:Name2;P:1;Z:3 ;;;;1.0;2.0;3.0;;;0.5;0.1;1.5;;; Name2 0.5 0.1 1.5
2 uid2 B:1,B:2,R:SomeName,P:1,R:SomeName_Z,P:0,M:1,M:3 ;;;1.5;1.1;1.4;;;4.1;3.2;3.3;;;; SomeName 1.5 1.1 1.4
3 uid2 B:1,B:2,R:SomeName,P:1,R:SomeName_Z,P:0,M:1,M:3 ;;;1.5;1.1;1.4;;;4.1;3.2;3.3;;;; SomeName_Z 4.1 3.2 3.3
Подробнее здесь: https://stackoverflow.com/questions/788 ... onditional