#pandas #dataframe
Вопрос:
У меня есть фрейм данных, как показано на рисунке
Мне нужно преобразовать его вот так
Это всего лишь примерная фиктивная копия моих фактических данных .. В нем более 5000 идентификаторов и 20 событий.
Поэтому мне нужно для каждого идентификатора суммировать , сколько раз каждое событие срабатывало индивидуально, и события должны быть отдельными столбцами.Как этого добиться у панд?
Ответ №1:
Вы можете использовать функцию pandas pivot_table
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
'two','one','three'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C','A','A'],
'baz': [1, 2, 3, 4, 5, 6,1,2],
'zoo': ['x', 'y', 'z', 'q', 'w', 't','x','x']})
print(df)
bar baz foo zoo
0 A 1 one x
1 B 2 one y
2 C 3 one z
3 A 4 two q
4 B 5 two w
5 C 6 two t
6 A 1 one x
7 A 2 three x
df.pivot_table(index='foo',columns='bar',values='baz',aggfunc='count',fill_value=0)
bar A B C
foo
one 2 1 1
three 1 0 0
two 1 1 1
В этом случае вам, возможно, придется сделать, как показано ниже.
df = pd.DataFrame({'Event':['a','b','c','d','c','a','a'],'ID':['001','002','003','004','004','004','001']})
df = df.reset_index()
df.pivot_table(index='ID',columns='Event',values='index',aggfunc='count',fill_value=0)
Event a b c d
ID
001 2 0 0 0
002 0 1 0 0
003 0 0 1 0
004 1 0 1 1
Комментарии:
1. Привет , я попробовал сводную таблицу, но я не могу получить изображение результата, которое я вам показал.
2. не могли бы вы, пожалуйста, сказать мне, каким будет код для моего случая, если я наберу его неправильно.