Insert Conditional Rows in Columns
Try, let's use multiindex with from_product
, set_index
, and reindex
,
This method works for all "seen" values, if a value isn't seen, then you'll need to use hardcoded list in the from_product method:
idx = pd.MultiIndex.from_product([df['Name'].unique(), df['Test'].unique()], names=['Name','Test'])df.set_index(['Name','Test']).reindex(idx, fill_value='No*').reset_index()
Output:
Name Test Completed0 John Math-Test1 Yes1 John Math-Test2 Yes2 John Math-Test3 Yes3 John Math-Test4 Yes4 John Math-Test5 Yes5 Lauren Math-Test1 Yes6 Lauren Math-Test2 Yes7 Lauren Math-Test3 Yes8 Lauren Math-Test4 No*9 Lauren Math-Test5 No*10 Tom Math-Test1 Yes11 Tom Math-Test2 Yes12 Tom Math-Test3 Yes13 Tom Math-Test4 Yes14 Tom Math-Test5 Yes
Update
idx = pd.MultiIndex.from_product([df['Name'].unique(), df['Test'].unique()], names=['Name','Test'])newidx = idx[~idx.isin(df.set_index(['Name','Test']).index)]pd.concat([df, newidx.to_series().reset_index().assign(Completed="No*")[['Name','Test','Completed']]], sort=True, ignore_index=True)