如何融合Pandas中的两个数据帧

时间:2015-01-23 07:00:55

标签: python pandas

我有两个数据框:

In [14]: rep1
Out[14]: 
   x  y  z
A  1  2  3
B  4  5  6
C  1  1  2

In [15]: rep2
Out[15]: 
   x  y  z
A  7  3  4
B  3  3  3

使用此代码创建:

import pandas as pd 
rep1 = pd.DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]),('C',[1,1,2])], orient='index', columns=['x', 'y', 'z'])
rep2 = pd.DataFrame.from_items([('A', [7, 3, 4]), ('B', [3, 3, 3])], orient='index', columns=['x', 'y', 'z'])

我想要做的是网格rep1rep2,以便产生如下结果:

gene rep1 rep2 type
A     1    7    x
B     4    3    x
A     2    3    y
B     5    3    y
A     3    4    z
B     6    3    z

跳过行C,因为rep1rep2不共享它。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

这样做:

df =pd.concat([rep1.stack(),rep2.stack()],axis=1).reset_index().dropna()
df.columns =['GENE','TYPE','REP1','REP2']
df.sort(columns=['TYPE','GENE'], inplace=True)

连接axis =1上的堆叠数据框。重置索引会使您返回基因并键入列。 dropna负责处理基因c产生的空值。添加正确的列名等。

返回:

   GENE TYPE REP1 REP2
0   A   x   1   7
3   B   x   4   3
1   A   y   2   3
4   B   y   5   3
2   A   z   3   4
5   B   z   6   3

答案 1 :(得分:1)

>>> c1 = rep1.values.T.flatten()
>>> c2 = rep2.values.T.flatten()
>>> c3 = np.vstack((rep1.columns.values, rep2.columns.values)).T.flatten()
>>> pd.DataFrame(np.vstack((c1,c2,c3)).T)
   0  1  2
0  1  7  x
1  4  3  x
2  2  3  y
3  5  3  y
4  3  4  z
5  6  3  z

编辑:当我回答这个问题时,问题根本就没有C行。现在事情变得更复杂了,但无论如何我都会留在这里。