比较两个数据框并输出一次重复行的索引

时间:2019-05-16 10:38:04

标签: pandas dataframe indexing find

我需要比较两个数据框的帮助。例如:

第一个数据帧是

Chart.Tooltip.positioners.custom

第二个数据帧是

df_1 = 
    0   1   2   3   4   5
0   1   1   1   1   1   1
1   2   2   2   2   2   2
2   3   3   3   3   3   3
3   4   4   4   4   4   4
4   2   2   2   2   2   2
5   5   5   5   5   5   5
6   1   1   1   1   1   1
7   6   6   6   6   6   6

我可以知道是否有一种方法(不使用for循环)来查找具有相同df_2行值的df_1行的索引。在上面的示例中,我的预期输出低于

df_2 = 
    0   1   2   3   4   5
0   1   1   1   1   1   1
1   2   2   2   2   2   2
2   3   3   3   3   3   3
3   4   4   4   4   4   4
4   5   5   5   5   5   5
5   6   6   6   6   6   6

上面“ index”变量的列大小应与df_2的列大小相同。

如果同一行df_2在df_1中重复多次,那么我只需要第一次出现的索引,这就是为什么我不需要索引4和6。

请帮助。非常感谢!

汤米

2 个答案:

答案 0 :(得分:0)

检查解决方案
df1=pd.DataFrame({'0':[1,2,3,4,2,5,1,6],
                 '1':[1,2,3,4,2,5,1,6],
                '2':[1,2,3,4,2,5,1,6],
                 '3':[1,2,3,4,2,5,1,6],
                 '4':[1,2,3,4,2,5,1,6],
                '5':[1,2,3,4,2,5,1,6]})

df1=pd.DataFrame({'0':[1,2,3,4,5,6],
                 '1':[1,2,3,4,5,66],
                '2':[1,2,3,4,5,6],
                 '3':[1,2,3,4,5,66],
                 '4':[1,2,3,4,5,6],
                '5':[1,2,3,4,5,6]})
df1[df1.isin(df2)].index.values.tolist()

### Output
[0, 1, 2, 3, 4, 5, 6, 7]

答案 1 :(得分:0)

使用DataFrame.mergeDataFrame.drop_duplicatesDataFrame.reset_index将索引转换为列,以避免丢失索引值,最后选择称为index的列:

s = df_2.merge(df_1.drop_duplicates().reset_index())['index']
print (s)
0    0
1    1
2    2
3    3
4    5
5    7
Name: index, dtype: int64

详细信息

print (df_2.merge(df_1.drop_duplicates().reset_index()))
   0  1  2  3  4  5  index
0  1  1  1  1  1  1      0
1  2  2  2  2  2  2      1
2  3  3  3  3  3  3      2
3  4  4  4  4  4  4      3
4  5  5  5  5  5  5      5
5  6  6  6  6  6  6      7