在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
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']})