PandasのDataframeで、特定条件の数値を統一したいです。
例えばこのようなdfがあります。

    id  label
0   a     1
1   a     2
2   a     1
3   b     2
4   b     2
5   c     2
6   a     1
7   b     1
8   b     2

aとbは複数のラベルを持っているため、数の多いラベルをidのラベルにしたいです。
つまり、aのラベルを全て1に、bのラベルを全て2に統一したいです。
この作業に対して2つの案を考えました。

1.value_countsで集計してwhere, applyで置き換える

def change_label(old_l,new_l):
    return new_l

ids = new_df['id'].unique()
for i in trange(len(ids)):
    new_label = list(new_df[new_df['id']==ids[i]]['label'].value_counts().items())[0][0]
    new_df['label'].where(new_df['id'] != ids[i], 
                                 new_df['label'].apply(lambda x:change_label(x,new_label)), 
                                 inplace=True)

2.重複データは最終的に必要がないので、value_countsで集計したあとに辞書に入れる

ids = new_df['id'].unique()
new_dict = {}
for i in trange(len(ids)):
    if new_df[new_df['id']==ids[i]]['label'].nunique()>1:
        new_label = list(new_df[new_df['id']==ids[i]]['label'].value_counts().items())[0][0]
        new_dict.update({ids[i]:new_label})
    else:
        new_dict.update({ids[i]:new_df[new_df['id']==ids[i]]['label'].unique()[0]})

案2は案1より高速化できたが、実際大量なデータを扱うため、さらに高速化したいです。
他に知見がありましたら、ご教示願いたいです。