Pandas dataframe, create columns depending on the row value
First we use DataFrame.explode to unnest your lists to rows.

Then we use DataFrame.pivot_table to pivot your dataframe from rows to column to get your desired result:

dfn = df.assign(countries=df['countries'].str.split(',')).explode('countries')
dfn['numbers'] = df.assign(numbers=df['numbers'].str.split(',')).explode('numbers')['numbers']

dfn = (
    dfn.pivot_table(index=dfn.index, 
                    columns='countries', 
                    values='numbers', 
                    aggfunc=lambda x: x, 
                    fill_value=0)
       .rename_axis(None, axis='columns')
       .add_suffix('_number')
)


Output

    ch_number de_number dk_number fr_number
abc         2         1         0         3
bcd         4         0         5         3