Чтение CSV в Pandas и получение вывода в требуемом формате - PullRequest
0 голосов
/ 16 сентября 2018

Я новичок в pandas. Я читаю файл csv и пытаюсь получить вывод как dictionary.

import pandas as pd

df = pd.read_csv('source.csv')
my_projects = ['WORLD', 'P&G', 'AVR', 'ABCD', 'Channel', 'Migration']
filtered_projects = df[(df['area'] == 'MY PROJECTS') & (df['name'].isin(my_projects))]
filtered_projects['count'] = 1
total_of_each_error = filtered_projects.groupby(['month','name','errors']).sum().reset_index()
total_of_each_error['month'] = pd.to_datetime(total_of_each_error['month']).dt.strftime('%B')

Список вещей, которые я пытаюсь сосчитать: ['Big', 'Small', 'Monitoring', 'Improvement']

Фрейм данных total_of_each_error имеет:

    month        name       errors     count
0   February     ABCD        Big         1
1   February     ABCD      Monitoring    3
2   February     WORLD     Small         1
3   February     Channel    Big          2
4   February     Channel   Small         1
5   February     Channel  Monitoring     1
6   February     AVR      Monitoring     1
7   April       WORLD     Monitoring     2
8   May         Migration    Big         1
9   May         Migration Monitoring     2
10  June        P&G       Small          1
11  June        P&G       Monitoring     1
12  June        ABCD      Monitoring     1
13  June        WORLD    Improvement     1
14  July        P&G      Monitoring      1
15  July        ABCD         Small       1
16  July        ABCD     Monitoring      1

Если в месяце нет конкретной ошибки, необходимо заполнить ноль. Вывод, который я пытаюсь получить, это dictionary:

data = {'WORLD': {'categories': ['February', 'April', 'May', 'June', 'July'],
                'series': [{
                    'name': 'Big Issue',
                    'data': [0, 0, 0, 0, 0]  # Number of Bigs in those months
                    }, {
                    'name': 'Small Issue',
                    'data': [1, 0, 0, 0, 0]  # Number of Smalls in those months
                    }, {
                    'name': 'Monitoring',
                    'data': [0, 2, 0, 0, 0]  # Number of Monitorings in those months
                    }, {
                    'name': 'Improvement',
                    'data': [0, 0, 0, 1, 0]  # Number of Improvements in those months
                    }]
                },
        'P&G': {'categories': ['February', 'April', 'May', 'June', 'July'],
                'series': [{
                    'name': 'Big Issue',
                    'data': [0, 0, 0, 0, 0]
                    }, {
                    'name': 'Small Issue',
                    'data': [0, 0, 0, 1, 0]
                    }, {
                    'name': 'Monitoring',
                    'data': [0, 2, 0, 0, 0]
                    }, {
                    'name': 'Improvement',
                    'data': [0, 0, 0, 1, 0]
                    }]
                }      

    }

Ожидаемый результат, показанный выше, предназначен только для WORLD и P&G. Словарь будет дополнен остальными элементами в my_projects. Порядок месяцев и данные должны быть сохранены.

Редактировать : изменено неправильное значение в name

1 Ответ

0 голосов
/ 16 сентября 2018

При сортировке и изменении вашего фрейма данных в правильный формат (используйте df.groupby и .unstack()), а затем при использовании метода to_dict() на вашем фрейме данных вы получите желаемые результаты.Пример ниже.

import numpy as np
import pandas as pd
df = pd.DataFrame(
    data ={'Month': ['Jan','Feb']*5,
           'Issue': ['Big Issue','Monitoring']*5,
           'value': np.arange(30,40)})

df.groupby(['Month','Issue']).count().unstack()
df.to_dict()

    df.to_dict()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...