#json #python-3.x #pandas #duplicates
#json #python-3.x #pandas #дубликаты
Вопрос:
Я пытаюсь преобразовать df
файл с уникальными ключами в JSON
файл. pandas dataframe
Выглядит так, как показано ниже.
import pandas as pd
d = {'col1': [1,2,2,2,3,3], 'col2': ['a','b','c','','e','f'], 'col3': ['one','two','three','four','five','six']}
df = pd.DataFrame(data=d)
>>> df
col1 col2 col3
0 1 a one
1 2 b two
2 2 c three
3 2 four
4 3 e five
5 3 f six
Я хочу, чтобы вывод JSON выглядел следующим образом:
{
"1": [
{
"col2": "a",
"col3": "one"
}
],
"2": [
{
"col2": "b",
"col3": "two"
},
{
"col2": "c",
"col3": "three"
},
{
"col2": "",
"col3": "four"
}
],
"3": [
{
"col2": "e",
"col3": "five"
},
{
"col2": "f",
"col3": "six"
}
]
}
Как я могу добиться этого в Python? Мои попытки не работают, поскольку данные содержат дубликаты ключей.
Ответ №1:
Сначала создайте вложенные списки, преобразовав col1
в индекс, сгруппируйте по значениям индекса, и все столбцы преобразуйте в list
s в лямбда-функции, последнее преобразование Series
в словарь с помощью Series.to_dict
:
d = df.set_index('col1').groupby('col1').apply(lambda x: x.to_dict('r')).to_dict()
Другая идея — использовать понимание словаря:
d = { k: v.to_dict(orient='records') for k, v in df.set_index(['col1']).groupby('col1')}
print (d)
{
1: [{
'col2': 'a',
'col3': 'one'
}],
2: [{
'col2': 'b',
'col3': 'two'
}, {
'col2': 'c',
'col3': 'three'
}, {
'col2': '',
'col3': 'four'
}],
3: [{
'col2': 'e',
'col3': 'five'
}, {
'col2': 'f',
'col3': 'six'
}]
}
Редактировать:
Если нужны col1
ключи, такие как строки:
df['col1'] = df['col1'].astype(str)
d = df.set_index('col1').groupby('col1').apply(lambda x: x.to_dict('r')).to_dict()