【发布时间】:2020-04-21 02:36:47
【问题描述】:
如何根据另一个查找数据框在一个数据框之间进行合并。
这是我要替换值的数据框 A:
InfoType IncidentType DangerType
0 NaN A NaN
1 NaN C NaN
2 NaN B C
3 NaN B NaN
这是查找表:
ID ParamCode ParamValue ParmDesc1 ParamDesc2 SortOrder ParamStatus
0 1 IncidentType A ABC DEF 1 1
1 2 IncidentType B GHI JKL 2 1
2 3 IncidentType C MNO PQR 7 1
2 3 DangerType C STU VWX 6 1
预期输入:
InfoType IncidentType DangerType
0 NaN ABC NaN
1 NaN MNO NaN
2 NaN GHI STU
3 NaN GHI NaN
请注意,ParamCode 是列名,我需要将 ParamDesc1 替换为数据框 A 中的相应列。数据框 A 中的每一列都可能有 NaN,我不打算删除它们。忽略它们。
这就是我所做的:
ntf_cols = ['InfoType','IncidentType','DangerType']
for c in ntf_cols:
if (c in ntf.columns) & (c in param['ParamCode'].values):
paramValue = param['ParamValue'].unique()
for idx, pv in enumerate(paramValue):
ntf['NewIncidentType'] = pd.np.where(ntf.IncidentType.str.contains(pv), param['ParmDesc1'].values, "whatever")
错误:
ValueError: 操作数不能与形状一起广播 (25,) (13,) ()
【问题讨论】:
-
这是一个常见的副本。参见,例如,stackoverflow.com/questions/36413993/…
-
@Eric Truett,在这被投票为重复关闭之前,是否有更好的匹配问题? OP 似乎需要引用另一个 df 中两列的值而不是一列。 @dee 如果您提供了迄今为止为解决此问题所做的尝试,那么@dee 会改善您的问题。
-
这是怎么复制的? @EricTruett我的问题需要在列与数据框中的值之间进行比较。这是完全不同的。它不在两列之间。
-
@Phillyclause89 我尝试了多次,但我一直在删除它们。由于比较是在另一个数据框中的列名称和值之间进行的,因此我无法转过头来。我不确定在这种情况下如何映射它们。
-
@Phillyclause89 更新了我一直在尝试做的代码。