我有以下表格
CODE LEV NAME
A00 3 text
A000 4 text
A001 4 text
A02 3 text
A022 4 text
A0220 5 text
A33 3 text
对于每个最高级别3,都有子级别4、5、6等。对于某些级别3,没有子级别。我需要转换关卡并使用pandas创建一个有意义的平面文件。
L3 L4 L5 NAME
A00 - - text
A00 A000 - text
A00 A001 - text
A02 - - text
A02 A022 - text
A02 A022 A0220 text
A33 - - text
我可能会被处以私刑,但既然没有更好的答案-希望有帮助:-)
>>> df
CODE LEV NAME
1 A00 3 text
2 A000 4 text
3 A001 4 text
4 A02 3 text
5 A022 4 text
6 A0220 5 text
7 A33 3 text
>>> (df
...: .groupby(['LEV','NAME'])
...: .agg(list)
...: .reset_index()
...: .explode('CODE')
...: .reset_index()
...: .pivot_table(index=['index', 'NAME'],columns='LEV',values='CODE', aggfunc=list)
...: .reset_index()
...: .explode('3')
...: .explode('4')
...: .explode('5')
...: .drop_duplicates()
...: .reset_index()
...: .drop(['level_0','index'], axis=1)
...: .rename({'3': 'L3', '4': 'L4', '5': 'L5'}, axis=1)
...: .rename_axis(None, axis=1)
...: .fillna('-'))[['L3','L4','L5','NAME']]
L3 L4 L5 NAME
0 A00 - - text
1 A02 - - text
2 A33 - - text
3 - A000 - text
4 - A001 - text
5 - A022 - text
6 - - A0220 text