#python #pandas
#python #pandas
Вопрос:
Мой фрейм данных похож на:
accident_type office A office B office C information
1 0 0 0 number
1 0 2 2 fatality
1 0 0 0 frequency
2 0 0 1 number
2 0 0 1 fatality
2 0 0 0 frequency
3 0 0 0 number
3 0 1 1 fatality
3 0 0 0 frequency
и я хочу добавить еще столбец, чтобы сдвинуть значение информации об аварии по вертикали, а позже я удалю столбцы office A, office B, office C и помещу их в другой новый столбец следующим образом:
accident_type information office number fatality frequency
1 number office A 0 0 0
1 fatality office B 0 2 0
1 frequency office C 0 2 0
2 number office A 0 0 0
2 fatality office B 0 0 0
2 frequency office C 1 1 0
3 number office A 0 0 0
3 fatality office B 0 1 0
3 frequency office C 0 1 0
Я пробую df.melt, но это не дает мне ожидаемого результата.
Кто-нибудь может мне помочь, как я могу сделать это на Python?
Спасибо
Комментарии:
1. Что происходит с двумя
2
s в столбцах office для несчастного случая типа 1 со смертельным исходом?
Ответ №1:
Я думаю, вам нужно DataFrame.melt
с DataFrame.pivot_table
:
df = (df.melt(['accident_type','information'],
var_name='office')
.pivot_table(index=['accident_type','office'],
columns='information',
values='value',
fill_value=0,
aggfunc='sum')
.reset_index()
.rename_axis(None, axis=1))
print (df)
accident_type office fatality frequency number
0 1 office A 0 0 0
1 1 office B 2 0 0
2 1 office C 2 0 0
3 2 office A 0 0 0
4 2 office B 0 0 0
5 2 office C 1 0 1
6 3 office A 0 0 0
7 3 office B 1 0 0
8 3 office C 1 0 0
Ответ №2:
похоже, вы хотите расплавить, а затем развернуть другую функцию?
df = df.melt(id_vars=['accident_type', 'information'], var_name='office')
отключит ваши столбцы, но если вам нужны отдельные столбцы number, fatality и frequency, вам необходимо выполнить повторный поворот.
df = df.pivot_table(index=['accident_type', 'information'], columns='office', values='value')
и если вы хотите это как обычный фрейм данных (не многоуровневый):
df = pd.DataFrame(df.to_records())
(имейте в виду, что ваш второй свод — это сводная таблица — если у вас есть уникальные идентификаторы, вы можете использовать pandas ‘df.pivot’ вместо этого)