Вы можете использовать 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)
, просто
Примечание: pd.DataFrame.sort
устарел в пользу pd.DataFrame.sort_values
.
Я предполагаю, что я нашел более простое решение
temp1 = pd.melt(df1, id_vars=["location"], var_name='Date', value_name='Value')
temp2 = pd.melt(df1, id_vars=["name"], var_name='Date', value_name='Value')
Concat whole temp1
с колонкой temp2
name
temp1['new_column'] = temp2['name']
Теперь у вас есть то, что вы попросил.
df2
[назад] вdf
– 3kstc 9 March 2018 в 00:02pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
. – Teepeemm 9 March 2018 в 19:59