Ответ 1
ОБНОВИТЬ
Начиная с версии 0.20, melt
является функцией первого порядка, теперь вы можете использовать
df.melt(id_vars=["location", "name"],
var_name="Date",
value_name="Value")
location name Date Value
0 A "test" Jan-2010 12
1 B "foo" Jan-2010 18
2 A "test" Feb-2010 20
3 B "foo" Feb-2010 20
4 A "test" March-2010 30
5 B "foo" March-2010 25
СТАРЫЕ (ER) ВЕРСИИ: <0,20
Вы можете использовать pd.melt
чтобы пройти большую часть пути, а затем отсортировать:
>>> df
location name Jan-2010 Feb-2010 March-2010
0 A test 12 20 30
1 B foo 18 20 25
>>> df2 = pd.melt(df, id_vars=["location", "name"],
var_name="Date", value_name="Value")
>>> df2
location name Date Value
0 A test Jan-2010 12
1 B foo Jan-2010 18
2 A test Feb-2010 20
3 B foo Feb-2010 20
4 A test March-2010 30
5 B foo March-2010 25
>>> df2 = df2.sort(["location", "name"])
>>> df2
location name Date Value
0 A test Jan-2010 12
2 A test Feb-2010 20
4 A test March-2010 30
1 B foo Jan-2010 18
3 B foo Feb-2010 20
5 B foo March-2010 25
(Может .reset_index(drop=True)
добавить .reset_index(drop=True)
, только чтобы сохранить вывод чистым.)
Примечание: pd.DataFrame.sort
устарела в пользу pd.DataFrame.sort_values
.