Я думаю, что сделал это.Может быть, это слишком долго, но это работает :) Спасибо, Френчи, еще раз за предложение "groupby"!
import pandas as pd
import numpy as np
df = pd.DataFrame({'var1': [23, 23, 43, 43, 53],
'var2': [1, 0, 0, 0,1],
'var3': [0, 0, 0, 1, 0],
'var4': [0, 0, 0, 1, 0],
'var5': [0, 1, 1, 0, 0]})
print(df)
df['Dup'] = np.where(df['var1'].duplicated(keep=False), 'dup', np.nan)
df['var2'] = np.where(df['Dup']=="dup", df.groupby(['var1'])['var2'].transform('max'), df['var2'])
df['var3'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var3'])
df['var4'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var4'])
df['var5'] = np.where((df['Dup']=="dup") & (df['var2']==1), 0 , df['var5'])
df['others_dup'] = np.where((df['Dup']=='dup') & (df['var2']==0), 1, np.nan)
df['var3']=np.where(df['others_dup']==1, df.groupby(['var1'])['var3'].transform('max'), df['var3'])
df['var4']=np.where(df['others_dup']==1, df.groupby(['var1'])['var4'].transform('max'), df['var4'])
df['var5']=np.where(df['others_dup']==1, df.groupby(['var1'])['var5'].transform('max'), df['var5'])
print(df)