2015-12-03 156 views
0

我不確定我是否正確使用這些條款,因爲我對熊貓和python很陌生。但是,我有兩個數據框我想加入其中。它們可以在索引列和其他鍵列(樣本)上匹配。 '樣本'的範圍從001到100,每個樣本的索引從1到729。連接索引和關鍵熊貓

DF1

sample x1 x2 x3 x4 
id     
1 068 421.67 0.34 0.71 0.928 
2 068 28.77 0.07 0.81 0.952 
3 068 4.01 0.36 0.70 0.925 
4 068 41.07 0.32 0.70 0.924 

DF2

q1 q2 q3 q4 q5 q6 sample 
id                     
1 a1 a2 r1 r2 c1 c2 068 
2 a1 a2 r1 r2 c1 c4 068 
3 a1 a2 r1 r2 c1 c5 068 
4 a1 a2 r1 r2 c3 c2 068 

結果

sample x1  x2  x3  x4  q1 q2 q3 q4 q5 q6 
id     
1 068 41.967 0.34 0.71 0.928 a1 a2 r1 r2 c1 c2 
2 068 28.77  0.07 0.81 0.952 a1 a2 r1 r2 c1 c4 
3 068 4.01  0.36 0.70 0.925 a1 a2 r1 r2 c1 c5 
4 068 41.07  0.32 0.70 0.924 a1 a2 r1 r2 c3 c2 
+0

如果它們具有相同的索引但不同樣本或不同索引但樣本相同?那麼你想怎麼做?另外,您的示例將以兩個具有相同名稱的列結尾。在這一項中,值是相同的,但在加入之後,根據您將如何加入它們,您可能會得到不同的值。這不是你想要的東西:) – Tasos

+0

@Tasos似乎我堅持把兩列和不同的值。當然我希望它是一樣的。對於每個樣本,有729行索引(id)對應於那個。 – Wasser

回答

0

你可以在idsample列使用merge爲2個dataframes。如果你想改變列名

In [33]: pd.merge(df1, df2, on=['id', 'sample']) 
Out[33]: 
    id sample  x1 x2 x3  x4 a1 a2 r1 r2 c1 c2 
0 1  68 421.67 0.34 0.71 0.928 a1 a2 r1 r2 c1 c2 
1 2  68 28.77 0.07 0.81 0.952 a1 a2 r1 r2 c1 c4 
2 3  68 4.01 0.36 0.70 0.925 a1 a2 r1 r2 c1 c5 
3 4  68 41.07 0.32 0.70 0.924 a1 a2 r1 r2 c3 c2 

:如果你想他們是Q1,Q2然後重命名列...

df3 = pd.merge(df1, df2, on=['id', 'sample']) 
df3.columns = df3.columns[:-6].tolist() + ['q1', 'q2', 'q3', 'q4', 'q5', 'q6'] 

In [50]: df3 
Out[50]: 
    id sample  x1 x2 x3  x4 q1 q2 q3 q4 q5 q6 
0 1  68 421.67 0.34 0.71 0.928 a1 a2 r1 r2 c1 c2 
1 2  68 28.77 0.07 0.81 0.952 a1 a2 r1 r2 c1 c4 
2 3  68 4.01 0.36 0.70 0.925 a1 a2 r1 r2 c1 c5 
3 4  68 41.07 0.32 0.70 0.924 a1 a2 r1 r2 c3 c2 

編輯

您可以爲創建序列列名(如果你有他們很多):

In [87]: ['q' + str(num) for num in range(1,7)] 
Out[87]: ['q1', 'q2', 'q3', 'q4', 'q5', 'q6']