2016-08-19 49 views
1

我有数据,并且必须使用熊猫进行处理,这是示例的代码:组合两个柱大熊猫值成一个

d = [ 
    (1,70399,0.988375133622), 
    (1,33919,0.981573492596), 
    (1,62461,0.981426807114), 
    (579,1,0.983018778374), 
    (745,1,0.995580488899), 
    (834,1,0.980942505189) 
] 

df = pd.DataFrame(d, columns=['source', 'target', 'weight']) 
source_old = df.source.copy() 

>>> source_old 
source_old 
0  1 
1  1 
2  1 
3 579 
4 745 
5 834 

但我需要source_old包含target太像:

0  1 
1  1 
2  1 
3 579 
4 745 
5 834 
6 33919 
7 62461 
8 70399 

我怎么用熊猫做到这一点? THX

回答

2
df[['source', 'target']].T.stack() 

source 0  1 
     1  1 
     2  1 
     3  579 
     4  745 
     5  834 
target 0 70399 
     1 33919 
     2 62461 
     3  1 
     4  1 
     5  1 
dtype: int64 

pd.concat([df[col] for col in ['source', 'target']]) 

0  1 
1  1 
2  1 
3  579 
4  745 
5  834 
0 70399 
1 33919 
2 62461 
3  1 
4  1 
5  1 
dtype: int64 

得到正是你要的

pd.concat([df['source'], df['target'].iloc[:3]], ignore_index=True) 

0  1 
1  1 
2  1 
3  579 
4  745 
5  834 
6 70399 
7 33919 
8 62461 
dtype: int64 
2

试试这个source_old = df.source.append(df.target)

+0

@ihsansat用于设置索引排序做'source_old = source_old.reset_index()' –

1

试试这个:

pd.melt(df[['source', 'target']])['value'][:-3].sort_values() 

0  1 
1  1 
2  1 
3  579 
4  745 
5  834 
7 33919 
8 62461 
6 70399 

融给你:

pd.melt(df[['source', 'target']]) 

    variable value 
0 source  1 
1 source  1 
2 source  1 
3 source 579 
4 source 745 
5 source 834 
6 target 70399 
7 target 33919 
8 target 62461 
9 target  1 
10 target  1 
11 target  1