Как я могу транспонировать результаты Pandas.Groupby - PullRequest
1 голос
/ 25 сентября 2019

Я создал сгруппированный фрейм данных total_hours по сотруднику id и общее количество часов, которое они отработали каждый week

id  week     duration
4       35       7.000000
        36       2.000000
        ...      ...
        40       5.000000

Как перенести результаты в следующий формат?

id      35  36  37  38  39  40
4       7.0 2.0 7.0 2.0 4.0 5.0

Я пробовал total_hours.T, но это недопустимо для SeriesGroupBy.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

попробуйте использовать это:

df  = df.pivot(index='id', columns='week', values='duration')
1 голос
/ 25 сентября 2019

Я думаю, вам нужно Series.unstack, если df равно DataFrame with MultiIndex:

#e.g. possible created df
df = df.groupby(['id', 'week']).sum()

print (df.index)
MultiIndex([(4, 35),
            (4, 36),
            (4, 40)],
           names=['id', 'week'])


df1 = df['duration'].unstack()
print (df1)
week   35   36   40
id                 
4     7.0  2.0  5.0

Если нужно id в столбец:

df1 = df['duration'].unstack().reset_index().rename_axis(None, axis=1)
print (df1)
   id   35   36   40
0   4  7.0  2.0  5.0

Альтернатива - при необходимости агрегирование sum:

df1 = df.pivot_table(index='id', columns='week', values='duration', aggfunc='sum')

df1 = df1.reset_index().rename_axis(None, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...