Это не очень хороший формат JSON, однако я написал подходящий для вас код:
raw_data = {'stateacttraf': ['stateacttraf','stateacttraf','stateacttraf','stateacttraf', 'stateacttraf2','stateacttraf2' ],
'stateno': [1, 1, 1, 2, 3, 4],
'statename': ['S1', 'S1', 'S1', 'S2','S3', 'S4'],
'id': [234569, 234569, 234569, 234569, 99, 99],
'message': ['stateactsplit','stateactsplit', 'stateactsplit','stateactsplit','stateacttraf2', 'stateacttraf2']}
df = pd.DataFrame(raw_data).set_index(['stateacttraf'])
stateno statename id message
stateacttraf
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 1 S1 234569 stateactsplit
stateacttraf 2 S2 234569 stateactsplit
stateacttraf2 3 S3 99 stateacttraf2
stateacttraf2 4 S4 99 stateacttraf2
Попробуйте этот код:
index_name = ['stateacttraf', 'message', 'id']
s = df.groupby(index_name).apply(lambda row: '\n '.join(map(lambda x: str(x.tolist())[1:-1], row.values)))
formatted_data = [{index_name[0]:s[i0].values[0], index_name[1]:i1, index_name[2]:i2} for i0, i1, i2 in s.index]
и вот данныев вашем (плохом) формате JSON:
[{'stateacttraf': "1, 'S1', 234569, 'stateactsplit'\n 1, 'S1', 234569, 'stateactsplit'\n 1, 'S1', 234569, 'stateactsplit'\n 2, 'S2', 234569, 'stateactsplit'",
'message': 'stateactsplit',
'id': 234569},
{'stateacttraf': "3, 'S3', 99, 'stateacttraf2'\n 4, 'S4', 99, 'stateacttraf2'",
'message': 'stateacttraf2',
'id': 99}]
СОВЕТ : если вы не хотите сходить с ума, я предлагаю вам перейти на стандартный формат json