2017-01-09 5 views
2

У меня есть кадр данных pandas с несколькими столбцами, и я хочу «сгладить» его до двух столбцов - один с именем столбца, а другой со значениями. Например.pandas - несколько столбцов столбцов «имя столбца - значение»

df1 = pd.DataFrame({'A':[1,2],'B':[2,3], 'C':[3,4]}) 

Как я могу преобразовать его выглядеть следующим образом:

df2 = pd.DataFrame({'column name': ['A','A','B','B','C','C'], 'value': [1,2,2,3,3,4]}) 

ответ

2

Вы можете stack складывать все значения столбца в одну, колонку, то падение первого индекса уровня призывающего reset_index, перезаписывать имена столбцов с которые вы желаете, а затем, наконец, сортировать, используя sort_values:

In [37]: 
df2 = df1.stack().reset_index(level=0, drop=True).reset_index() 
df2.columns = ['column name', 'value'] 
df2.sort_values(['column name', 'value'], inplace=True) 
df2 

Out[37]: 
    column name value 
0   A  1 
3   A  2 
1   B  2 
4   B  3 
2   C  3 
5   C  4 
+0

Хммм, разница в 2 минуты ... Как вы думаете? – jezrael

+2

@jezrael Ваш первый опубликованный ответ был неправильным и неполным, поэтому я опубликовал мой, это имеет мало значения в большой схеме вещей – EdChum

1

Вы можете изменить с помощью stack к MultiIndexSeries, а затем reset_index с sort_values:

df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values('index') 
df2.columns = ['column name','value'] 
print (df2) 
    column name value 
0   A  1 
3   A  2 
1   B  2 
4   B  3 
2   C  3 
5   C  4 

Один ряд решение с rename колонке index - column name:

df2 = df1.stack() 
     .reset_index(level=0, drop=True) 
     .reset_index(name='value') 
     .sort_values(['index']) 
     .rename(columns={'index':'column name'}) 
print (df2) 
    column name value 
0   A  1 
3   A  2 
1   B  2 
4   B  3 
2   C  3 
5   C  4 

Если нужно сортировать по обеим колонкам:

df2 = df1.stack().reset_index(level=0, drop=True).reset_index().sort_values(['index',0]) 
df2.columns = ['column name','value'] 
print (df2) 
    column name value 
0   A  1 
3   A  2 
1   B  2 
4   B  3 
2   C  3 
5   C  4 
Смежные вопросы