Изменение формы данных на одном столбце в пандах - PullRequest
0 голосов
/ 07 мая 2018

У меня есть датафрейм в пандах следующим образом

ID_1    ID_2    Date        Val
1234    1480    6/13/1970   10
1234    1480    7/8/1970    9
1234    1480    6/4/1970    8
1234    1480    4/1/1970    7
5567    1481    11/20/1970  25
5567    1481    5/25/1970   12
5567    1481    4/23/1970   9
8799    1482    12/23/1970  8
8799    1482    4/23/1970   7
8799    1482    9/26/1970   6

Я хочу преобразовать это в другой фрейм данных, который имеет следующий формат

ID_1    ID_2    Largest Event   2nd Largest Event    3rd Largest Event 4th Largest Event
1234    1480    6/13/1970               7/8/1970          6/4/1970       4/1/1970
5567    1481    11/20/1970              5/25/1970         4/23/1970       NaN
8799    1482    12/23/1970              4/23/1970         9/26/1970       NaN

Это подмножество гораздо большегодатафрейм, где я хочу 10 крупнейших событий.Даты уже отсортированы в порядке убывания столбца Val, поэтому сортировка не является проблемой.

Есть идеи?

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете использовать rank с pivot_table

df.Val=df.Val.rank(ascending=False).astype(int).astype(str)+' Largest Event'
df.pivot_table(index=['ID_1','ID_2'],columns='Val',values='Date',aggfunc='sum').reset_index()
Out[629]: 
Val  ID_1  ID_2 1 Largest Event 2 Largest Event 3 Largest Event
0    1234  1480       6/13/1970        7/8/1970        6/4/1970

Обновление

df.Val=df.groupby(['ID_1','ID_2']).Val.rank(ascending=False).astype(int).astype(str)+' Largest Event'
df.pivot_table(index=['ID_1','ID_2'],columns='Val',values='Date',aggfunc='sum').reset_index()
Out[673]: 
Val  ID_1  ID_2 1 Largest Event 2 Largest Event 3 Largest Event  \
0    1234  1480       6/13/1970        7/8/1970        6/4/1970   
1    5567  1481      11/20/1970       5/25/1970       4/23/1970   
2    8799  1482      12/23/1970       4/23/1970       9/26/1970   
Val 4 Largest Event  
0          4/1/1970  
1              None  
2              None  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...