需要在 Pandas -Python 中映射两个数据框

Need to Map two dataframe in Pandas -Python

我有两个数据框,我需要映射两个数据框中的不同列。共享两个数据框。

数据框:-

   IN.Type     STRA     STRB   STRC
   CRBD        2487     XR     XL0054
   DFRS        3754     MY     XL0684
   CRBD        7356     DF     XL8911
   DFRS        4487     DF     XL58999
   DFRS        7785     MY     XL76568
   CRBD        8235     GL     XL0635
   DFRS        2468     PQ     XL4569
   DFRS        9735     GR     XL7589
   CRBD        6486     TY     XL5566 
   DFRS        1023     PQ     XL27952

Dataframe2 :-

        REF1     REF2 
        2468     PQ
        3754     MY
        1023     PQ
        9735     NA
        2487     XR
        7785     MY
        7356     DF
        8235     NA
        6486     TY
        4487     NA

需要什么:-

  1. 首先需要在Dataframe["STRB"]中搜索Dataframe2["REF2"],如果可用则选择 Dataframe["IN.Type"] 和 Dataframe["STRC"] 中对应的数据可用于输出 数据框。
  2. 其次如果Dataframe2["REF2"] == "NA"那么需要在Dataframe2["REF1"]中搜索 Dataframe["STRA"],如果可用,则选择相应的可用数据 Dataframe["IN.Type"] 和 Dataframe["STRC"] 用于输出数据帧。
  3. 第三种如果Dataframe2["REF2"]不在Dataframe["STRB"]中则直接把"NONE"输出 数据框“类型”列。

输出数据帧(样本):-

        Type     RTFN
        CRBD     XL0054
        DFRS     XL76568
        NONE     XL0635
  1. 从 Dataframe["IN.Type"] 获取的数据将进入 Output["Type"]。
  2. 从 Dataframe["STRC"] 获取的数据将进入输出 ["RFTN"]。

使用Series.isin for filter both DataFrames and set values in DataFrame.loc:

m1 =  Dataframe["STRB"].isin(Dataframe2["REF2"])
m2 = Dataframe["STRA"].isin(Dataframe2.loc[Dataframe2["REF2"].isna(), "REF1"])
#if NA s string
#m2 = Dataframe["STRA"].isin(Dataframe2.loc[Dataframe2["REF2"].eq('NA'), "REF1"])
df = pd.concat([Dataframe.loc[(m1 | m2), ['IN.Type','STRC']].drop_duplicates('IN.Type'), 
                Dataframe.loc[~m1, ['IN.Type','STRC']].assign(**{'IN.Type':None})])
df.columns=['Type','RTFN']
print (df)
   Type    RTFN
0  CRBD  XL0054
1  DFRS  XL0684
5  None  XL0635
7  None  XL7589