Search code examples
pythonpandasgroup-by

Unlist (ungroup) a string df col into separate rows


I used the command to group. Now I want to 'ungroup' and get back the original df

example

original_df = pd.DataFrame({
    "id": ["abc", "abc","abc","def"],
    "col2": ["adam","eve","john","john"]
})

original_df.groupby('id').agg(
    unique_count_col2=('col2', 'nunique'),
    unique_values_col2=('col2', 'unique')
).reset_index()
desired_df = pd.DataFrame({
    "id": ["abc", "abc","abc","def"],
    "col2": ["adam","eve","john","john"]
})

Solution

  • You can .explode() the unique_values_col2 column (but if you had duplicate col2 values under id they are lost):

    out = (
        df[["id", "unique_values_col2"]]
        .rename(columns={"unique_values_col2": "col2"})
        .explode("col2")
    )
    
    print(out)
    

    Prints:

        id  col2
    0  abc  adam
    0  abc   eve
    0  abc  john
    1  def  john