2014-09-04 38 views
2

我有两个不同长度的数据帧。我想提取两个数据帧中'key1'值相同的数据。从两个数据框中提取一个与一列相同值的数据框?

In [6]: data1['key1'][5:10] 
Out[6]: 
5 3701061.280649 
6 3702854.401078 
7 3706447.681452 
8 3710048.323744 
9 3713648.507167 
Name: key1, dtype: float64 

In [7]: data2['key1'][10:15] 
Out[7]: 
10 3735249.951436 
11 3738850.242555 
12 3742450.472855 
13 3746051.017456 
14 3749651.185752 
Name: key1, dtype: float64 

我基本上要与来自各个data1和data2的两个数据帧到结束,所以可以绘制出关于“KEY2”(y轴)关于“KEY1”(x轴)的差异

我该如何做到这一点?

+0

所以,你要像'数据1 [data.key1 == data2.key1]',反之亦然? – EdChum 2014-09-04 19:49:08

+0

是的,但是我的len(data1)和len(data2)是不一样的。 – amehta 2014-09-04 19:50:08

+0

确定更新了我的答案,您可以使用'isin'来过滤掉df行,我已经添加了虚拟数据来说明 – EdChum 2014-09-04 19:53:39

回答

2

您可以使用isin,这将过滤掉从其他DF列值的列的值,然后重复用于其他方式轮:

In [4]: 

df = pd.DataFrame({'a':arange(10), 'b':randn(10)}) 
df1 = pd.DataFrame({'a':arange(2,12), 'b':randn(10)}) 
print(df) 
print(df1) 
    a   b 
0 0 -0.255545 
1 1 -1.550302 
2 2 -0.825056 
3 3 1.475839 
4 4 0.059035 
5 5 2.295766 
6 6 1.604147 
7 7 -1.877267 
8 8 -0.462598 
9 9 -1.347194 
    a   b 
0 2 -1.462567 
1 3 -0.277680 
2 4 -0.461539 
3 5 1.094466 
4 6 -1.086069 
5 7 0.249207 
6 8 2.613443 
7 9 1.036450 
8 10 -0.562149 
9 11 -0.679488 
In [6]: 

df[df.a.isin(df1.a)] 
Out[6]: 
    a   b 
2 2 -0.825056 
3 3 1.475839 
4 4 0.059035 
5 5 2.295766 
6 6 1.604147 
7 7 -1.877267 
8 8 -0.462598 
9 9 -1.347194 
In [7]: 

df1[df1.a.isin(df.a)] 
Out[7]: 
    a   b 
0 2 -1.462567 
1 3 -0.277680 
2 4 -0.461539 
3 5 1.094466 
4 6 -1.086069 
5 7 0.249207 
6 8 2.613443 
7 9 1.036450 
+0

其他列有类似的命名'键',所以我实际上想维护两个单独的数据框,以便我可以绘制差异。 – amehta 2014-09-04 19:46:50

相关问题