Сортировка с помощью сводных таблиц pandas

#python #pandas #dataframe

#python #pandas #сводная

Вопрос:

У меня есть фрейм данных, и я хочу изменить его порядок. Но я не смог получить желаемую форму моей таблицы

df =

 id_easy     latitude    longitude
1           45.0714     7.6187
1           45.0739     7.6195
3           45.0745     7.6152
3           45.0833     7.6145
2           45.0946     7.6194
  

Желаемый результат:

 1       2       3   
45.0714 7.6187  45.0946 7.6194  45.0745     7.6152
45.0739 7.6195                  45.0946     7.6194
  

Я пытался:

 df_pivot = pd.pivot_table(df,columns = ['id_easy'], values = ['longitude','latitude'])
  

Комментарии:

1. @anky_91I нужны значения id_easy в виде столбцов

2. на самом деле то же самое, (df.assign(k=df.groupby('id_easy').cumcount()).set_index(['id_easy','k']) .unstack(0) .sort_values('id_easy',axis=1)) просто открепите на первом уровне, затем

Ответ №1:

Вы можете использовать GroupBy.cumcount для счетчика, а затем pivot также для сглаживания MultiIndex использования f-string с:

 df['g'] = df.groupby('id_easy').cumcount()

df = (df.pivot(index='g', columns='id_easy', values=['longitude','latitude'])
        .sort_index(axis=1, level=1))
df.columns = [f'{a}_{b}' for a, b in df.columns]
print (df)
   latitude_1  longitude_1  latitude_2  longitude_2  latitude_3  longitude_3
g                                                                           
0     45.0714       7.6187     45.0946       7.6194     45.0745       7.6152
1     45.0739       7.6195         NaN          NaN     45.0833       7.6145
  

Или используйте set_index с unstack (работает также со старыми версиями pandas):

 df['g'] = df.groupby('id_easy').cumcount()

df = df.set_index(['g','id_easy']).unstack().sort_index(axis=1, level=1)
df.columns = [f'{a}_{b}' for a, b in df.columns]
print (df)
   latitude_1  longitude_1  latitude_2  longitude_2  latitude_3  longitude_3
g                                                                           
0     45.0714       7.6187     45.0946       7.6194     45.0745       7.6152
1     45.0739       7.6195         NaN          NaN     45.0833       7.6145