2017-02-17 1 views
0

Привет, я пытаюсь выполнить операцию транспонирования в pandas, но условие является значением одного столбца, которое должно быть связано с транспонированными строками. Приведенный ниже пример будет объяснить лучший способ: данные выглядит следующим образом:Как перенести определенные столбцы в строки в pandas связать другое значение столбца

 
A 1 2 3 4 51 52 53 54 
B 11 22 23 24 71 72 73 74 

В результате я пытаюсь сделать так:

 
A 1 51 
A 2 52 
A 3 53 
A 4 54 
B 11 71 
B 22 72 
B 23 73 
B 24 74 

В первой строке, данные в одна строка, я хочу транспонировать данные от 1 до 4 со значением «А» в другом столбце. Может ли кто-нибудь предложить, как я могу это сделать?

ответ

1

Кажется, что вам нужно melt или stack:

print (df) 
    0 1 2 3 4 
0 A 1 2 3 4 
1 B 11 22 23 24 

df1 = pd.melt(df, id_vars=0).drop('variable', axis=1).sort_values(0) 
df1.columns = list('ab') 
print (df1) 
    a b 
0 A 1 
2 A 2 
4 A 3 
6 A 4 
1 B 11 
3 B 22 
5 B 23 
7 B 24 

df2 = df.set_index(0).stack().reset_index(level=1, drop=True).reset_index(name='a') 
df2.columns = list('ab') 
print (df2) 
    a b 
0 A 1 
1 A 2 
2 A 3 
3 A 4 
4 B 11 
5 B 22 
6 B 23 
7 B 24 

Редактируйте комментарий:

#set index with first column 
df = df.set_index(0) 

#create MultiIndex 
cols = np.arange(len(df.columns)) 
df.columns = [ cols // 4, cols % 4] 
print (df) 
    0    1    
    0 1 2 3 0 1 2 3 
0         
A 1 2 3 4 51 52 53 54 
B 11 22 23 24 71 72 73 74 

#stack, reset index names, remove level and reset index 
df1 = df.stack().rename_axis((None, None)).reset_index(level=1, drop=True).reset_index() 
#set new columns names 
df1.columns = ['a','b','c'] 
print (df1) 
    a b c 
0 A 1 51 
1 A 2 52 
2 A 3 53 
3 A 4 54 
4 B 11 71 
5 B 22 72 
6 B 23 73 
7 B 24 74 
+0

Спасибо за ваш ответ, я обновил вопрос, который я пытаюсь сделать с фреймом данных , – MegaBytes

+0

Пожалуйста, проверьте отредактированный ответ. – jezrael

+0

Спасибо. Это работает для меня. Ты спасаешь много времени, я пытался с утра сегодня. – MegaBytes

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