我有两个Pandas DataFrames(A
和B
),包含2列和不同的行数。
它们曾经是numpy 2D矩阵,它们都包含整数值
有没有办法检索这两者之间匹配行的索引?
我一直在尝试isin()
或query()
或merge()
,但没有成功。
这实际上是之前question的后续行动:我尝试使用pandas数据帧,因为原始矩阵相当庞大。
如果可能,所需的输出应该是一个数组(或列表),其中包含B
中A
的第{i}行的行索引。例如,[1,5,4]
的输出列表表示在A
的第一行中找到了B
的第一行,在第五行中找到了A
的第二行在B
的第四行中找到了A
和B
的第三行。
答案 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