2017-02-17 20 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

相关问题