Home

/1

import pandas as pd


def dataframe_summary(df: pd.DataFrame) -> pd.DataFrame:
    summary = []

    for col in df.columns:
        col_data = df[col]

        non_null = col_data.dropna()
        unique_values = non_null.unique()

        # 3 most frequent values
        top_values = non_null.value_counts().head(3).index.tolist()

        # 2 random values from remaining uniques
        remaining = list(set(unique_values) - set(top_values))
        random_values = (
            pd.Series(remaining)
            .sample(min(2, len(remaining)), random_state=42)
            .tolist()
            if remaining
            else []
        )

        sample_values = top_values + random_values

        summary.append(
            {
                "column": col,
                "unique_count": len(unique_values),
                "missing_values": col_data.isna().sum(),
                "non_nan_values": col_data.notna().sum(),
                "sample_values": sample_values,
            }
        )

    result = pd.DataFrame(summary)

    # sort by unique value count ascending
    result = result.sort_values(by="unique_count", ascending=True).reset_index(
        drop=True
    )

    return result


# Usage
summary_df = dataframe_summary(df)
summary_df.to_csv("dataframe_summary.csv", index=False)