Сводная база данных по количеству значений в группе вместо полной сводной - PullRequest
1 голос
/ 21 мая 2019

Я пытаюсь развернуть кадр данных в пандах.В приведенном ниже примере пивот будет находиться в столбце id, а значение - это столбец значения.Но вместо обычного центра, где каждый из идентификаторов будет иметь свой собственный столбец (несколько тысяч в моем реальном наборе данных), я хочу (3) общие столбцы идентификаторов, поскольку каждый тип обычно имеет только 1-3 идентификатора.

Я пытался использовать функции pivot и pivot table в пандах.Я также играл с групповым без агрегации.Есть ли более простое решение?Есть ли термин для того, чего я пытаюсь достичь?

Starting Sample Dataset: 

type id    value
A    123   11.9
A    234   10.2
A    129   19.3
B    123   11.9
B    189   12.2
B    120   17.8
C    120   17.8
C    139   17.9
D    110   8.5

Desired Output:

type id1    id2    id3 
A    11.9   10.2   19.3  
B    11.9   12.2   17.8  
C    17.8   17.9   Nan
D    8.5    Nan    Nan


Ответы [ 2 ]

0 голосов
/ 21 мая 2019

cumcount, pivot_table & add_prefix

Сначала мы можем создать новые идентификаторы с cumcount, поскольку они расположены в последовательном порядке в группах type:

Затем мы можем развернуть этот новый id и использовать add_prefix, чтобы получить нужные имена столбцов:

df['id2'] = df.groupby(['type']).cumcount()+1

piv = df.pivot_table(index='type', columns='id2', values='value')\
        .add_prefix('id_')\
        .reset_index()\
        .rename_axis(None, axis=1)

  type  id_1  id_2  id_3
0    A  11.9  10.2  19.3
1    B  11.9  12.2  17.8
2    C  17.8  17.9   NaN
3    D   8.5   NaN   NaN
0 голосов
/ 21 мая 2019

Сначала создайте фиктивный идентификатор столбца, а затем сгруппируйте его, используя

df1['aux'] = df1.groupby('type')['id'].cumcount().reset_index()[0].values
df1.pivot(index='type', columns = 'aux', values = 'value')

Выход:

aux      0     1     2
type                  
A     11.9  10.2  19.3
B     11.9  12.2  17.8
C     17.8  17.9   NaN
D      8.5   NaN   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...