Reputation: 431
I have a columns with numbers separated by comma now the values should be split into new columns.
Values
'456,567,67,96'
'67,987'
The new Dataframe should look like:
Values Value1 Value2 Value3 Value4
'456,567,67,96' 456 567 67 96
'67,987' 67 987
'4321,96,912 4321 87 912
Also an empty column next to each column to map the numbers with the name.
Values Name
4321 EB_Meter
987 EB_Meter987
912 DG_Meter912
567 Ups_Meter567
456 Ups_Meter456
96 DG_Meter96
67 DGB_Meter
So the final DataFrame is:
Values Value1 Name1 Value2 Name2 Value3 Name3 Value4 Name4
'456,567,67,96' 456 Ups_Meter456 567 Ups_Meter567 67 DGB_Meter 96 DG_Meter96
'67,987' 67 DGB_Meter 987 EB_Meter987
'4321,96,912 4321 EB_Meter 96 DG_Meter96 912 DG_Meter912
Upvotes: 0
Views: 429
Reputation: 150785
For the first output:
splits = df.Values.str.split(',', expand=True)
out = df.join(splits.add_prefix('Value'))
Output:
Values Value0 Value1 Value2 Value3
0 456,567,67,96 456 567 67 96
1 67,987 67 987 None None
2 4321,96,91 4321 96 91 None
For the later output:
melt_splits = splits.reset_index().melt('index')
melt_splits['value'] = melt_splits['value'].map(df2.set_index('Values')['Name'])
out = out.join(melt_splits.pivot('index','variable', 'value').add_prefix('Name'))
Output:
Values Value0 Value1 Value2 Value3 Name0 Name1 Name2 Name3
-- ------------- -------- -------- -------- -------- ------------ ------------ --------- ----------
0 456,567,67,96 456 567 67 96 Ups_Meter456 Ups_Meter567 DGB_Meter DG_Meter96
1 67,987 67 987 DGB_Meter EB_Meter987 nan nan
2 4321,96,91 4321 96 91 EB_Meter DG_Meter96 nan nan
Upvotes: 2