Итак, в моем наборе данных есть информация по местоположению для n дат. Проблема в том, что каждая дата на самом деле является отдельным заголовком столбца. Например, CSV выглядит как
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Я бы хотел, чтобы это выглядело как
location name Date Value
A "test" Jan-2010 12
A "test" Feb-2010 20
A "test" March-2010 30
B "foo" Jan-2010 18
B "foo" Feb-2010 20
B "foo" March-2010 25
проблема в том, что я не знаю, сколько дат в столбце (хотя я знаю, что они всегда будут начинаться после имени)
Ответы:
ОБНОВЛЕНИЕ
Начиная с версии 0.20,
melt
это функция первого порядка, теперь вы можете использоватьСТАРЫЕ (ER) ВЕРСИИ: <0.20
Вы можете использовать его,
pd.melt
чтобы получить большую часть пути, а затем отсортируйте:(Можно добавить
.reset_index(drop=True)
, чтобы вывод был чистым.)Примечание :
pd.DataFrame.sort
устарел и заменен наpd.DataFrame.sort_values
.источник
df2
[обратно] вdf
pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
.Используйте
set_index
сstack
дляMultiIndex Series
, то дляDataFrame
дополненияreset_index
сrename
:источник
Думаю, я нашел более простое решение
Соединить целиком
temp1
сtemp2
колонкойname
Теперь у вас есть то, о чем вы просили.
источник
pd.wide_to_long
Вы можете добавить префикс к столбцам с указанием года, а затем подавать прямо в
pd.wide_to_long
. Я не буду притворяться, что это эффективно , но в определенных ситуациях это может быть удобнее, чемpd.melt
, например, когда ваши столбцы уже имеют соответствующий префикс.источник