ddf = pd.DataFrame() grouped = fdf.groupby('dd_CONCAT_CHAR_ATP_TARGET') for group_value, group_df in grouped: df1 = group_df.reset_index().copy() # Create a copy of the grouped DataFrame pathlist = df1['path'].str.split('/') # Split the 'path' column into a list df1['dd_VALIDITY_DATE'] = df1['dd_VALIDITY_DATE'].fillna(method='ffill') # Forward fill missing dates # Update the 'dd_VALIDITY_DATE' column based on the modified 'path' column df1['dd_VALIDITY_DATE'] = df1.apply(lambda row: row['dd_VALIDITY_DATE'] if row['path'] == '/'.join(row['path'].split('/')[1:]) else row['dd_VALIDITY_DATE'], axis=1) ddf = ddf.append(df1, ignore_index=True) ddf = ddf.drop(['index'], axis=1)