#python #pandas #dataframe #pivot-table
Вопрос:
У меня есть следующий кадр данных с пособиями на одного сотрудника. Есть 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 в качестве заголовков столбцов, а затем добавить общую сумму выгоды в правильный столбец. Например, это выглядело бы так:
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
Каков был бы наилучший способ сделать это, принимая во внимание, что уникальные значения выгод неизвестны?
Ответ №1:
Давайте попробуем 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
, вы получите желаемый результат