#python #pandas #numpy #automation
#python #pandas #numpy #автоматизация
Вопрос:
У меня есть столбцы с числами, разделенными запятой, теперь значения должны быть разделены на новые столбцы.
Values
'456,567,67,96'
'67,987'
Новый фрейм данных должен выглядеть так:
Values Value1 Value2 Value3 Value4
'456,567,67,96' 456 567 67 96
'67,987' 67 987
'4321,96,912 4321 87 912
Также пустой столбец рядом с каждым столбцом, чтобы сопоставить числа с именем.
Values Name
4321 EB_Meter
987 EB_Meter987
912 DG_Meter912
567 Ups_Meter567
456 Ups_Meter456
96 DG_Meter96
67 DGB_Meter
Итак, конечный фрейм данных:
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
Ответ №1:
Для первого вывода:
splits = df.Values.str.split(',', expand=True)
out = df.join(splits.add_prefix('Value'))
Вывод:
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
Для последующего вывода:
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'))
Вывод:
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
Комментарии:
1. Спасибо за помощь.. Однако 1-я часть кода работает нормально, но я не могу получить результат 2-й половины фрейма данных df2 с именем user и содержит ‘userId’ и ‘UserName’ в качестве столбцов.