Как изменить форму данных

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

nam code date1 date2 0 a 1 1/1 1/2 1 b 3 3/4 4/5 

но df.stack кажется бесполезным в этой ситуации.

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

  nam code date 0 a 1 1/1 1 a 1 1/2 2 b 3 3/4 3 b 3 4/5 

One Solution collect form web for “Как изменить форму данных”

Вы можете использовать lreshape , sort_values по столбцам nam , reindex_axis и last reset_index :

 print pd.lreshape(df, {'date': ['date1', 'date2']}) .sort_values('nam') .reindex_axis(['nam','code','date'], axis=1) .reset_index(drop=True) nam code date 0 a 1 1/1 1 a 1 1/2 2 b 3 3/4 3 b 3 4/5 

Другое решение с melt , drop для variable столбчатой ​​колонки, sort_values по столбцу nam и last reset_index :

 print pd.melt(df, id_vars=['nam','code'], value_name='date') .drop('variable', axis=1) .sort_values('nam') .reset_index(drop=True) nam code date 0 a 1 1/1 1 a 1 1/2 2 b 3 3/4 3 b 3 4/5 

РЕДАКТИРОВАТЬ:

lreshape теперь недокументирован, но возможен в будущем, удалив ( с pd.wide_to_long тоже ).

Возможное решение заключается в слиянии всех трех функций с одним – возможно, melt , но теперь оно не реализовано. Может быть, в какой-то новой версии панд. Тогда мой ответ будет обновлен.

  • Редактировать многоформатные форматы длинного формата с помощью Pandas
  • разделил серию Pandas без мультииндекса
  • Изменить кадр данных pandas из строк в столбцы
  • Измените массив в NumPy
  • Python - лучший язык программирования в мире.