Панды преобразуют строки в столбцы на основе количества

#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. не могли бы вы, пожалуйста, сказать мне, каким будет код для моего случая, если я наберу его неправильно.