Первая попытка ответить на вопрос по питону, поэтому, хотя это, безусловно, дольше, чем ответ coldspeed, для меня имеет больше смысла использовать функции melt
, merge
и pivot
.
import pandas as pd
import numpy as np
# make an object from the first dataset
df_1 = pd.DataFrame(
{"ID" : [100, 101, 102, 103, 104],
"Name" : ["A", "B", "C", "D", "E"],
"Linked Model 1" : [1111, 1112, np.nan, 1114, 1114],
"Linked Model 2" : [1112, 1113, np.nan, np.nan, 1111],
"Linked Model 3" : [np.nan, 1115, np.nan, np.nan, 1112]})
# make an object for the second data set
df_2 = pd.DataFrame(
{"Model ID" : [1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118],
"Name" : ["A", "A,B", "C", "D", "Q", "Z", "E", "W"]})
# tidy the data
df_1 = pd.melt(df_1, ["ID", "Name"])
# left join the second data set
df_1 = pd.merge(df_1, df_2, how='left', left_on='value', right_on='Model ID').reset_index()
#pivot the data back out to achieve the desired format
df_1 = df_1.pivot_table(index='ID',
columns='variable',
values='Name_y',
aggfunc='first',
dropna=False))
variable Linked Model 1 Linked Model 2 Linked Model 3
ID
100 A A,B NaN
101 A,B C Q
102 NaN NaN NaN
103 D NaN NaN
104 D A A,B