Создайте номер столбца в зависимости от значений одного столбца-Python, Pandas

#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’ в качестве столбцов.