根据一列Python和Pandas的值创建多个列

根据一列Python和Pandas的值创建多个列,python,pandas,numpy,automation,Python,Pandas,Numpy,Automation,我有一个用逗号分隔的数字列,现在这些值应该被拆分成新的列 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
'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
对于第一个输出:

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
    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
对于后面的输出:

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
0  456,567,67,96    456    567     67     96
1         67,987     67    987   None   None
2     4321,96,91   4321     96     91   None
    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
对于第一个输出:

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
    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
对于后面的输出:

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
0  456,567,67,96    456    567     67     96
1         67,987     67    987   None   None
2     4321,96,91   4321     96     91   None
    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

感谢您的帮助。但是,代码的第一部分工作正常,但我无法获得第二部分的结果。df2数据帧被命名为用户,并包含“UserId”和“UserName”列。感谢您的帮助。但是,代码的第一部分工作正常,但我无法获得第二部分的结果。df2数据帧被命名为用户并包含“UserId”和“UserName”作为列。