2013-11-07 3 views
4

у меня есть панд dataframe, с 4-х строк и 4 столбцов - вот asimple версия:питона панды, некоторые столбцы в строки

import pandas as pd 
import numpy as np 
rows = np.arange(1, 4, 1) 
values = np.arange(1, 17).reshape(4,4) 
df = pd.DataFrame(values, index=rows, columns=['A', 'B', 'C', 'D']) 

, что я пытаюсь сделать, это преобразовать это к 2 * 8 dataframe, с B, C и D alligng для каждого массива - так это будет выглядеть следующим образом:

1 2 
1 3 
1 4 
5 6 
5 7 
5 8 
9 10 
9 11 
9 12 
13 14 
13 15 
13 16 

чтения на панд документации, которую я попытался это:

df1 = pd.pivot_table(df, rows = ['B', 'C', 'D'], cols = 'A') 

, но дает мне ошибку, что я не могу определить источник (заканчивается

DataError: No numeric types to aggregate

)

следующее, что я хочу, чтобы разделить dataframe, основанные на ценностях, но я думаю, что команда .groupby, вероятно, будет заботиться о нем

ответ

6

То, что вы ищете, melt функцию

pd.melt(df,id_vars=['A']) 

    A variable value 
0 1  B  2 
1 5  B  6 
2 9  B  10 
3 13  B  14 
4 1  C  3 
5 5  C  7 
6 9  C  11 
7 13  C  15 
8 1  D  4 
9 5  D  8 
10 9  D  12 
11 13  D  16 

Заключительная сортировка в соответствии с A Затем необходимо

pd.melt(df,id_vars=['A']).sort('A') 

     A variable value 
0 1  B  2 
4 1  C  3 
8 1  D  4 
1 5  B  6 
5 5  C  7 
9 5  D  8 
2 9  B  10 
6 9  C  11 
10 9  D  12 
3 13  B  14 
7 13  C  15 
11 13  D  16 
+0

спасибо за быстрый и ясный ответ - именно то, что я ищу – Dimitris

Смежные вопросы