根据一列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”作为列。