I assume when you say,
"I want df1 shape for the new merged data frame also."
you mean you want a dataframe with the same number of rows and columns as df1. If that is the case, why do you want to join to df2 if you aren't bringing in any new columns from df2?
Unless otherwise specified, in the merge statement all columns will be brought in from df1 and df2 in the resultant df.
So you can explicitly specify the columns you want to bring in from df1 and df2 as:
m=df1[['col1', 'col2', ....]].merge(df2[['col3','col4', ...]], on=['Campaign ID'],how='inner')
Which will bring in the columns you want since you specify the column names ('col1', 'col2') explicitly.
As for keeping the number of rows the same, since the campaign ID is not unique in either table you will have a Cartesian product, which means that one instance of a particular campaign ID in df1 could link to multiple rows in df2. If you want the number of rows to be the same you must ensure that campaign ID in df1 only matches to one instance of Campaign ID in df2. Also once you are sure that one Campaign ID in df1 only matches one Campaign ID in df2 you want to use a left join (not inner) to ensure that lines that have no Campaign in df2 are not lost.