首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于两栏条件的大熊猫两种数据对比

基于两栏条件的大熊猫两种数据对比
EN

Stack Overflow用户
提问于 2022-05-04 08:07:30
回答 1查看 126关注 0票数 0

我有两个列不同的数据,我需要搜索和映射新文件中的数据。我正在共享数据格式和所需的输出。

DF1

代码语言:javascript
复制
    Ref.X               Ref.Y            Ref.No
    255623              145244651        XF1234
    45454544            NA               DF7886
    1300256655          3511614646       DF8948
    5546446166          NA               VX4578
    1230001556          NA               GL8947
    4548754545          4548545877       DF7896
    3652656             NA               XF4895
    7884045455          45681247         GL8597
    148428              1242154661       XF3564

DF2

代码语言:javascript
复制
    Type      STR1            STR2
    ABJH      45656644        145244651
    ABJH      844654989       1242154661
    BHJH      51654241654     3511614646
    BHJH      1230001556      255565656
    ABJH      5546446166      8946549849
    ABJH      45454544        544895655
    BHJH      3652656         565464447

现在,我需要从上面的两个数据文件输出。

条件

  1. 需要在STR2中搜索Ref.Y,如果可用,则选择用于输出的“类型”。如果Ref.Y为"NA“,则需要在STR1中搜索Ref.X,如果可用,则选择输出的”类型“。
  2. 在期望的输出中也需要"Ref.No”,对应于"Type“Ref.X或Ref.Y,它们位于DF2

中。

期望输出

代码语言:javascript
复制
    Ref.X               Ref.Y            Ref.No     Int_Type
    255623              145244651        XF1234     ABJH
    45454544            NA               DF7886     ABJH
    1300256655          3511614646       DF8948     BHJH
    5546446166          NA               VX4578     ABJH
    1230001556          NA               GL8947     BHJH
    3652656             NA               XF4895     BHJH
    148428              1242154661       XF3564     ABJH

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-04 08:24:26

您可以尝试将NA字符串重新设置为<NA>类型,然后使用np.where

代码语言:javascript
复制
df1 = df1.replace({'NA': pd.NA})

df1['Int_Type'] = np.where(df1['Ref.Y'].isna(),
                       df1['Ref.X'].map(dict(zip(df2['STR1'], df2['Type']))),
                       df1['Ref.Y'].map(dict(zip(df2['STR2'], df2['Type']))))

或者您可以直接与NA字符串进行比较:

代码语言:javascript
复制
df1['Int_Type'] = np.where(df1['Ref.Y'].eq('NA'),
代码语言:javascript
复制
        Ref.X         Ref.Y  Ref.No  Int_Type
0      255623  1.452447e+08  XF1234  ABJH
1      148428  1.242155e+09  XF3564  ABJH
2  1300256655  3.511615e+09  DF8948  BHJH
3  1230001556           NaN  GL8947  BHJH
4  5546446166           NaN  VX4578  ABJH
5    45454544           NaN  DF7886  ABJH
6     3652656           NaN  XF4895  BHJH
7  4548754545  4.548546e+09  DF7896   NaN
8  7884045455  4.568125e+07  GL8597   NaN

要使Ref.No与在DF2中找到的“类型”Ref.X或Ref.Y相对应,可以在Int_Type中删除NAN

代码语言:javascript
复制
df1 = df1.dropna(subset='Int_Type')
代码语言:javascript
复制
print(df1)

        Ref.X         Ref.Y  Ref.No Int_Type
0      255623  1.452447e+08  XF1234     ABJH
1      148428  1.242155e+09  XF3564     ABJH
2  1300256655  3.511615e+09  DF8948     BHJH
3  1230001556           NaN  GL8947     BHJH
4  5546446166           NaN  VX4578     ABJH
5    45454544           NaN  DF7886     ABJH
6     3652656           NaN  XF4895     BHJH
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72109704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档