2017-02-17 3 views
0

を関連付ける私はパンダに転置操作を実行しようとしていますが、条件が1列の値が転置行に関連付けられている必要があります。下記の の例では、より良い方法を説明します: をデータがあるようになっています。私はこのようにやろうとしていますがHi、他の列の値

 
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 

、データがです単一の行は、私は他の列の値「A」と1~4からデータを転置します。どのように私はこれを行うことができます誰も提案できますか?

答えて

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 

EDIT:

#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

関連する問題