объединить столбцы данных в виде вложенного ключа с именами столбцов Dynami c или с индексом - PullRequest
1 голос
/ 29 января 2020

Я новичок в python и pandas. Мне нужно объединить несколько столбцов на фрейме данных во вложенный ключ в выводе json. Имена столбцов являются динамическими c, кроме имени столбца.

ввод:

   name      384925  504100  296371  487730  296373  487729  296374  489406  296400  486601  384113
0  abc       0.0     0.0    -0.375   0.0     0.375   0.000   0.5     0.00    0.5     0.000   0.5
1  def       NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN
2  xyz       0.0     0.0    -0.375   0.0     0.375   0.000   0.5     0.00    0.5     0.000   0.5

Ожидаемый вывод json

[
 {
   "name": "abc",
   "sizes": [
    { "384925": 0.0 },
      { "504100": 0.0 },
      { "296371": -0.375 },
      { "487730": 0.0 },
      { "296373": 0.375 },
      { "487729": 0.0 },
      { "296374": 0.5 },
      { "489406": 0.0 },
      { "296400": 0.5 },
      { "486601": 0.0 },
      { "384113": 0.5 }
   ]
 },
{
   "name": "def",
   "sizes": [
    { "384925": null },
      { "504100": null },
      { "296371": null },
      ...
      { "486601": null },
      { "384113": null }
   ]
 },
{
   "name": "xyz",
   "sizes": [
    { "384925": 0.0 },
      { "504100": 0.0 },
      { "296371": -0.375 },
      ...
      { "486601": 0.0 },
      { "384113": 0.5 }
   ]
 },
]

код, который я пытался

df.iloc[:, 2:].apply(lambda x: tuple(x)).to_dict()

json_out = df.to_json(orient='records')

1 Ответ

1 голос
/ 29 января 2020

Однострочник, для создания желаемого результата

out = [
    {'name': gname, 'sizes': gdf.drop(columns='name').to_dict(orient='records')}
    for gname, gdf in df.groupby('name')
]

Если вы хотите конвертировать в json,

json.dumps(out)
...