Я хочу сгруппировать по моему фрейму данных на двух разных уровнях перед преобразованием в формат json - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть фрейм данных с приведенной ниже структурой и данными.Я хочу сгруппировать по 2 различным уровням: level1 по doc_id и doc_name и level2 pgf_id pgf_data.После выполнения groupby его необходимо преобразовать в json в следующем формате.

df_final = (df.groupby(['pgf_id'], as_index=True)
    .apply(lambda x: x[['sent_id','sent_data','label']].to_dict('r'))
    .reset_index().to_json(orient='records'))

doc_id  doc_name    pgf_id  pgf_data    sent_id sent_data   label
001abz  simple_doc  0001567a This is for understanding purpose. There are more 2 important sentences in the para.

 {
    "doc_id": "001abz",
    "doc_name": "simple_doc",
    "paragraphs": [
        {
            "pgf_id": "0001567a",
            "pgf_text": "This is for understanding purpose. There are more 2 important sentences in the para."
            {
              "sent_id": "0" 
              "sent_data": "This is for understanding purpose".
              "label" : "label1"

             },
             {
              "sent_id": "1" 
              "sent_data": "There are more 2 important sentences in the para.".
              "label" : "label2"

             }

        },
        {
            "pgf_id": "0001999a",
            "pgf_text": "This is a different para that need to be classified. The extraction is a part of it. Extraction is done for multiple sentences. "
             {
              "sent_id": "0" 
              "sent_data": "This is a different para that need to be classified".
              "label" : "label2"

             },
             {
              "sent_id": "1" 
              "sent_data": "The extraction is a part of it."
              "label" : "label1"

             },
             {
              "sent_id": "2" 
              "sent_data": "Extraction is done for multiple sentences. "
              "label" : "label3"

             }
        }
      ]

}

1 Ответ

0 голосов
/ 04 апреля 2019

Я не был уверен, что вы хотите опубликовать действительный JSON или какой-то другой вариант, но я сделал несколько предположений по этому поводу, главным образом, что голые объекты с ключами sent_id и т. Д. Должны были находиться в массиве с ключом r. Если у вас все в порядке с использованием некоторых циклов, вот что я сделал:

from json import dumps

# `df` is a pandas.DataFrame with your data

output = []
for (doc_id, doc_name), pgf_dataframe in df.groupby(['doc_id', 'doc_name']):
    document = {'doc_id': doc_id, 'doc_name': doc_name}
    paragraphs = []
    for (pgf_id, pgf_data), r_dataframe in pgf_dataframe.groupby(['pgf_id', 'pgf_data']):
        paragraph = {'pgf_id': pgf_id, 'pgf_text': pgf_data}
        events = []
        for i, row in r_dataframe.iterrows():
            events.append({'sent_id': row['sent_id'], 'sent_data': row['sent_data'], 'label': row['label']})
        paragraph['r'] = events
        paragraphs.append(paragraph)
    document['paragraphs'] = paragraphs
    output.append(document)

# `output` is a list of "document" objects.
print(dumps(output))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...