合并两个数据帧但基于字符串匹配条件

问题描述 投票:0回答:1

在Python中,我有两个数据框。

df1 如下所示:

ID      Limit       Comment
12      200         ['Normal']
23      202         ['Emergency']
23      203         ['Normal']
43      304         ['Emergency']
12      500         ['Emergency']
24      100         ['Emergency']

df2 如下所示。

Name          Title      ID     Limit Type
BASE CASE     title1     12      X
NOT_BASE      title12    23      N
NOT_BASE_1    title 23   43      X
BASE CASE     title 23   23      X
NOT_BASE_2    title23    12      X

我想合并 ID 上的数据帧,但在 df2 中,其中“名称”列下列出了“基本情况”,它应该列出“注释”列中针对“正常”列出的限制值。如果不是基本情况,则使用针对紧急情况列出的限制。因此,输出应该如下所示。

df3

Name          Title      ID     Limit Type   Limit
BASE CASE     title1     12      X           200
NOT_BASE      title12    23      N           202
NOT_BASE_1    title 23   43      X           304
BASE CASE     title 23   23      X           203
NOT_BASE_2    title23    12      X           500
python pandas dataframe merge
1个回答
0
投票

assign
一个新列,为您的
merge
提供辅助密钥:

import numpy as np

out = (df2.assign(Comment=np.where(df2['Name'].eq('BASE CASE'), 'Normal', 'Emergency'))
          .merge(df1, on=['ID', 'Comment'], how='left')
         #.drop(columns=['Comment']) # optional
       )

输出:

         Name     Title  ID Limit Type    Comment  Limit
0   BASE CASE    title1  12          X     Normal    200
1    NOT_BASE   title12  23          N  Emergency    202
2  NOT_BASE_1  title 23  43          X  Emergency    304
3   BASE CASE  title 23  23          X     Normal    203
4  NOT_BASE_2   title23  12          X  Emergency    500

可重复输入:

df1 = pd.DataFrame({'ID': [12, 23, 23, 43, 12, 24],
                    'Limit': [200, 202, 203, 304, 500, 100],
                    'Comment': ['Normal', 'Emergency', 'Normal', 'Emergency', 'Emergency', 'Emergency']})
df2 = pd.DataFrame({'Name': ['BASE CASE', 'NOT_BASE', 'NOT_BASE_1', 'BASE CASE', 'NOT_BASE_2'],
                    'Title': ['title1', 'title12', 'title 23', 'title 23', 'title23'],
                    'ID': [12, 23, 43, 23, 12],
                    'Limit Type': ['X', 'N', 'X', 'X', 'X']})
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.