使几列虚拟并移动值 pandas

Make few columns dummy and move values pandas

我有以下数据框,每个员工的福利。有 3 列可以添加员工福利,但福利本身没有要放置的确切列。那是数据框:

  Country Employee Name         Benefit 1   Total 1         Benefit 2  Total 2  \
0      PT    Employee 1  Health Insurance  1000.0     Car allowance   1500.0   
1      PT    Employee 2  Health Insurance  1000.0               NaN      NaN   
2      PT    Employee 3  Health Insurance  1500.0               NaN      NaN   
3      DK    Employee 4               NaN     NaN  Health Insurance   1000.0   
4      DK    Employee 5               NaN     NaN   Study Allowance   2000.0   
5      DK    Employee 6               NaN     NaN               NaN      NaN   
6      CZ    Employee 7               NaN     NaN               NaN      NaN   
7      CZ    Employee 8     Car allowance  1000.0               NaN      NaN   
8      CZ    Employee 9               NaN     NaN    Food Allowance    500.0   
9      CZ   Employee 10               NaN     NaN               NaN      NaN   

        Benefit 3  Total 3 
0  Food Allowance    500.0  
1             NaN      NaN  
2             NaN      NaN  
3             NaN      NaN  
4             NaN      NaN  
5             NaN      NaN  
6             NaN      NaN  
7             NaN      NaN  
8   Car allowance   1500.0  
9             NaN      NaN

我需要将收益 1、2 和 3 的唯一值作为列 headers,然后将收益的总和添加到正确的列中。例如,它看起来像这样:

  Country Employee Name  Health Insurance  Food Allowance  Car Allowance  \
0      PT    Employee 1            1000.0           500.0         1500.0   
1      PT    Employee 2             100.0             NaN            NaN   
2      PT    Employee 3            1500.0             NaN            NaN   
3      DK    Employee 4            1000.0             NaN            NaN   
4      DK    Employee 5               NaN             NaN            NaN   
5      DK    Employee 6               NaN             NaN            NaN   
6      CZ    Employee 7               NaN             NaN            NaN   
7      CZ    Employee 8               NaN             NaN         1000.0   
8      CZ    Employee 9               NaN           500.0         1500.0   

   Study Allowance  
0              NaN  
1              NaN  
2              NaN  
3              NaN  
4           2000.0  
5              NaN  
6              NaN  
7              NaN  
8              NaN

考虑到收益的独特价值未知,最好的方法是什么?

让我们尝试 wide_to_long()+pivot_table() 和几种清理方法:

out=(pd.wide_to_long(df,['Benefit','Total'],['Country','Employee Name'],'drop',sep=' ')
       .reset_index()
       .pivot_table('Total',['Country','Employee Name'],'Benefit')
       .reset_index()
       .rename_axis(columns=None))

现在如果你打印 out 你会得到你想要的输出