Pandas DataFrame中匹配行的索引[Python]

时间:2016-06-03 10:47:13

标签: python pandas dataframe

我有两个Pandas DataFrames(AB),包含2列和不同的行数。
它们曾经是numpy 2D矩阵,它们都包含整数值 有没有办法检索这两者之间匹配行的索引?

我一直在尝试isin()query()merge(),但没有成功。

这实际上是之前question的后续行动:我尝试使用pandas数据帧,因为原始矩阵相当庞大。

如果可能,所需的输出应该是一个数组(或列表),其中包含BA的第{i}行的行索引。例如,[1,5,4]的输出列表表示在A的第一行中找到了B的第一行,在第五行中找到了A的第二行在B的第四行中找到了AB的第三行。

2 个答案:

答案 0 :(得分:1)

我会这样做:

In [199]: df1.reset_index().merge(df2.reset_index(), on=['a','b'])
Out[199]:
   index_x  a  b  index_y
0        1  9  1       17
1        3  4  0        4

或者像这样:

In [211]: pd.merge(df1.reset_index(), df2.reset_index(), on=['a','b'], suffixes=['_1','_2'])
Out[211]:
   index_1  a  b  index_2
0        1  9  1       17
1        3  4  0        4

数据:

In [201]: df1
Out[201]:
   a  b
0  1  9
1  9  1
2  8  1
3  4  0
4  2  0
5  2  2
6  2  9
7  1  1
8  4  3
9  0  4

In [202]: df2
Out[202]:
    a  b
0   3  5
1   5  0
2   7  8
3   6  8
4   4  0
5   1  5
6   9  0
7   9  4
8   0  9
9   0  1
10  6  9
11  6  7
12  3  3
13  5  1
14  4  2
15  5  0
16  9  5
17  9  1
18  1  6
19  9  5

答案 1 :(得分:0)

如果没有合并,您可以使用==,然后查看每一行是否有False

df1 = pd.DataFrame({'a':[0,1,2,3,4],'b':[0,1,2,3,4]})
df2 = pd.DataFrame({'a':[0,1,2,3,4],'b':[2,1,2,2,4]})
test = pd.DataFrame(index = df1.index,columns = ['test'])
for row in df1.index:
    if False in (df1 == df2).loc[row].values:
        test.ix[row,'test'] = False
    else:
        test.ix[row,'test'] = True

Out[1]:
    test
0   False
1   True
2   True
3   False
4   True