Используйте панд для динамического преобразования нескольких строк с соответствующим индексом в несколько столбцов - PullRequest
0 голосов
/ 21 ноября 2018

Мне нужно преобразовать следующий фрейм данных из этого:

class_id     instructor_id
 1                10
 2                10
 2                20
 3                30
 3                40
 3                50

в следующее:

class_id   instructor_id   instructor_id_2   instructor_id_3
 1             10
 2             10                   20
 3             30                   40                       50

Количество уникальных столбцов instuctor_id будет определяться динамически на основе количестваномер Instructor_id, связанный с каждым class_id.Имена столбцов instructor_id будут продолжать ту же схему, что и Instructor_id_x.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

groupby + cumcount + unstack

Вот один из способов использования вспомогательной серии key:

key = df.groupby('class_id')['instructor_id'].cumcount()\
        .add(1).map('Instructor_{}'.format)

res = df.set_index(['class_id', key]).unstack().reset_index()

# clean up column names
res.columns = res.columns.droplevel(0)
res = res.rename(columns={'': 'class_id'})

print(res)

   class_id  Instructor_1  Instructor_2  Instructor_3
0         1          10.0           NaN           NaN
1         2          10.0          20.0           NaN
2         3          30.0          40.0          50.0
0 голосов
/ 21 ноября 2018

Использование groupby apply + list и apply + pd.Series как:

df1 = df.groupby('class_id')['instructor_id'].apply(list).apply(pd.Series)
# alternative df.groupby('class_id')['instructor_id'].apply(lambda x: pd.Series(x.tolist())).unstack()
df1.columns = ['instructor_id']+['instructor_id_'+str(i+1) for i in df1.columns[1:]]
df1.reset_index(inplace=True)

print(df1)
   class_id  instructor_id  instructor_id_2  instructor_id_3
0         1           10.0              NaN              NaN
1         2           10.0             20.0              NaN
2         3           30.0             40.0             50.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...