import pandas as pd import json data = [dict(grupa1='wartosc1', grupa2='wartosc1', cos1='wartosc', cos2='wartosc', cos3='wartosc'), dict(grupa1='wartosc1', grupa2='wartosc2', cos1='wartosc', cos2='wartosc', cos3='wartosc'), dict(grupa1='wartosc1', grupa2='wartosc2', cos1='test', cos2='wartosc', cos3='wartosc'), dict(grupa1='wartosc2', grupa2='wartosc3', cos1='wartosc', cos2='wartosc', cos3='wartosc'), dict(grupa1='wartosc2', grupa2='wartosc4', cos1='wartosc', cos2='wartosc', cos3='wartosc')] df = pd.DataFrame(data) result1 = {} for key1, df1 in df.groupby(['grupa1']): result2 = {} for key2, df2 in df1.groupby(['grupa2']): result2[str(key2)] = df2.drop(columns=['grupa1', 'grupa2']).to_dict('records') result1[str(key1)] = result2 print(json.dumps(result1, indent=4))