2017-02-17 18 views
0

嗨我想在熊貓中進行轉置操作,但條件是應將一列的值與轉置行相關聯。 下面給出的例子解釋更好的辦法: 的數據是這樣的:如何將特定的列轉換爲熊貓中的行關聯其他列值

 
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,其他列中的值爲'A'。任何人都可以建議我該怎麼做?

回答

1

看來你需要meltstack

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

相關問題