在两个 pandas 数据框中查找值并创建新列

Looking up values in two pandas data frames and create new columns

我的问题有两个数据框。

df1

ID      Value
 1      A
 2      B
 3      C

df2:

ID      F_ID     S_ID
1       2        3
2       3        1
3       1        2

我想在每个 ID 列旁边创建一个列,用于存储从 df1 中查找的值。输出应如下所示:

ID  ID_Value     F_ID  F_ID_Value   S_ID  S_ID_Value
1     A             2   B              3       C
2     B             3   C              1       A
3     C             1   A              2       B

基本上是从 df1 查找并创建一个新列来存储这些值。

您可以在 df2 的每一列上使用 map,值为 df1

s = df1.set_index('ID')['Value']
for col in df2.columns:
    df2[f'{col}_value'] = df2[col].map(s)
print (df2)
   ID  F_ID  S_ID ID_value F_ID_value S_ID_value
0   1     2     3        A          B          C
1   2     3     1        B          C          A
2   3     1     2        C          A          B

applyconcat

df_ = pd.concat([df2, df2.apply(lambda x: x.map(s)).add_prefix('_value')], axis=1)
df_ = df_.reindex(sorted(df_.columns), axis=1)

如果顺序很重要(我意识到不在评论中)是必要的,请使用 DataFrame.insert 枚举和一些数学:

s = df1.set_index('ID')['Value']

for i, col in enumerate(df2.columns, 1):
    df2.insert(i * 2 - 1, f'{col}_value', df2[col].map(s))
print (df2)
   ID ID_value  F_ID F_ID_value  S_ID S_ID_value
0   1        A     2          B     3          C
1   2        B     3          C     1          A
2   3        C     1          A     2          B