连接来自两个文件的数据

Concatenating data from two files

有 2 个文件用 Pandas 打开。如果两个文件的第一列有共同部分(彩色字母),我想将第二个文件第二列的数据粘贴到第一个文件的匹配部分。如果没有匹配,我想写'NaN'。在这种情况下我有办法吗?

文件1

enter code here
    0    1
0  JCW  574
1  MBM  4212
2  COP  7424
3  KVI  4242
4  ECX  424

文件2

enter code here
     0      1
0  G=COP  d4ssd5vwe2e2
1  G=DDD  dfd23e1rv515j5o
2  G=FEW  cwdsuve615cdldl
3  G=JCW  io55i5i55j8rrrg5f3r
4  G=RRR  c84sdw5e5vwldk455
5  G=ECX  j4ut84mnh54t65y

文件1#

enter code here
    0    1     2
0  JCW  574   io55i5i55j8rrrg5f3r
1  MBM  4212  NaN
2  COP  7424  d4ssd5vwe2e2
3  KVI  4242  NaN
4  ECX  424   j4ut84mnh54t65y

使用 join='outer' 查看 pandas 的连接函数(https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html). There is also 问题及其对您有帮助的答案。

它涉及重新索引每个数据框以使用现在称为“0”的列作为索引,然后根据它们的索引连接两个数据框。

另外,我可以建议你 do not paste an image 你的数据框,但以其他人可以测试他们的建议的形式上传数据。

使用Series.str.extract for new Series for matched values by df1[0] values first and then merge with left join in DataFrame.merge:

df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)

s = df2[0].str.extract(f'({"|".join(df1[0])})', expand=False)

df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
df.columns = np.arange(len(df.columns))
print (df)
     0     1                    2
0  JCW   574  io55i5i55j8rrrg5f3r
1  MBM  4212                  NaN
2  COP  7424         d4ssd5vwe2e2
3  KVI  4242                  NaN
4  ECX   424      j4ut84mnh54t65y

或者如果需要匹配列 df1[0] 的最后 3 个值,请使用:

s = df2[0].str.extract(f'({"|".join(df1[0].str[-3:])})', expand=False)

df = df1.merge(df2[[1]], how='left', left_on=0, right_on=s)
df.columns = np.arange(len(df.columns))
print (df)