使几列虚拟并移动值 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
你会得到你想要的输出
我有以下数据框,每个员工的福利。有 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
你会得到你想要的输出