如何在python中找到两个文件的交点

时间:2018-07-12 09:16:04

标签: python-3.x

我有两个大文件,如下所示:

file1

108 a  107          a 6    1

110 a  109          a 50   0

121 a  120          a 107  0

200 a  198          a 108  0

202 a  200          a 109  1

                    a 120  0

                    a 130  1

我想基于file1的第二和第三列以及file2的第一和第二列找到交点,然后打印file1和file2的第三列的整个交点线:

输出:

108 a 107 0

110 a 109 1

121 a 120 0

我知道如何根据整条线找到两个文件的交点。关于如何在python中实现我的情况的任何线索吗?谢谢!

1 个答案:

答案 0 :(得分:1)

具有pandas.DataFrame.merge功能(作为单行解决方案):

In [122]: df1 = pd.read_table('file1', delim_whitespace=True, header=None)

In [123]: df1
Out[123]: 
     0  1    2
0  108  a  107
1  110  a  109
2  121  a  120
3  200  a  198
4  202  a  200

In [124]: df2 = pd.read_table('file2', delim_whitespace=True, header=None)

In [125]: df2
Out[125]: 
   0    1  2
0  a    6  1
1  a   50  0
2  a  107  0
3  a  108  0
4  a  109  1
5  a  120  0
6  a  130  1

In [126]: print(df1.merge(df2, left_on=[1,2], right_on=[0,1]).loc[:, ['0_x','1_x','2_x','2_y']].to_string(header=False, index=False))
108  a  107  0
110  a  109  1
121  a  120  0

要将结果转储到csv文件中:

df1.merge(df2, left_on=[1,2], right_on=[0,1]).loc[:, ['0_x','1_x','2_x','2_y']].to_csv('result.csv', sep='\t', header=False, index=False)