Поиск значений в двух pandas фреймах данных и создание новых столбцов - PullRequest
1 голос
/ 01 мая 2020

У меня есть два фрейма данных в моей проблеме.

df1

ID      Value
 1      A
 2      B
 3      C

df2:

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

Я хочу создать столбец рядом с каждым столбцом идентификатора, в котором будут храниться значения, найденные в 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 и создавая новый столбец для хранения этих значений.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Если важен порядок (я понял, не в комментариях), используйте 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
1 голос
/ 01 мая 2020

Вы можете использовать map для каждого столбца df2 со значением 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

или с apply и concat

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