Итерация строк и сбор значений для вывода.Numpy и Python 3.6 - PullRequest
0 голосов
/ 22 мая 2018

Обновление от 22.05.1818: Ответ @aorr ниже исходного вопроса.

Я пытаюсь собрать каждый идентификатор и данные для этого идентификатора для тысяч входов.

Я пытаюсь собрать каждую строку отдельных идентификаторов, отсортировать даты, затем построить график для каждого идентификатора плюс данные и экспортировать диаграмму для каждого идентификатора.

Отредактировано Пример данных:

  • Имена столбцов: Id Date OG Company Date2

  • aab72ffd-4d0b-4c62-b6fe-4c55b98be9a0 3/1/1999 180,66 673 A 1/1/1996

  • aab72ffd-4d0b-4c62-b6fe-4c55b98be9a0 3/1/1995 173,9 651 A 1/1 /1996
  • a15961bc-0263-4c66-a825-1deb69bda8be 12/1/2010 55,14 542 C 1/1/2011
  • a15961bc-0263-4c66-a825-1deb69bda8be 5/1/2012 49.24577 C 1/1/2011
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 12/1/2000 48,14 290 D 3/1/2002
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 3/1/2003 69.03 282,5 D 3/1/2002

  • Желаемые выходные массивы / диаграммы, но отсортированные по дате.

  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 01.07.2005 28,24 327
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 10/1/1998 45,11 335
  • 1a5d1e4dbf62e3bf2 01.07.2001 28,22 348
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 7/1/1997 44,53 350,5
  • 10a1d17b-1f5c-4a4e4dbf62e3bf2 01.08.2001 28,4 333,5
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 01.10.2005 41,72 314
  • 10a1d17b-1f5c-4a62f1f2f1f2f1f2f2f1f2f1f2f2f2f2f1f2f2f1d2f6f4d129.53 313.5
  • 10a1d17b-1f5c-4a4d-8186-e4dbf62e3bf2 01.08.2002 43.24 319

Код, который я набрал до сих пор, успешно создает индексированный массив различных данныхтипы.Теперь я просто пытаюсь перебрать все строки и организовать данные так, чтобы они распечатывали / записывали отдельные массивы / диаграммы на основе идентификаторов.

Вот что у меня есть:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np 

#import data
mydataset = pd.read_csv('input_test.csv', dtype=None)

x = mydataset.iloc[:,:].values
y = mydataset.iloc[:,:].values

#Id
b = np.array((x[:,0]), dtype=str)
#Date
c = np.array((x[:,1]), dtype=str)
# O Var
d = np.array((x[:,2]), dtype=int)
# G var
e = np.array((x[:,3]), dtype=int)
#Stack
f = np.vstack((b,c,d,e))
#Transpose array
g = f.T

#Plot data
plt.figure()
plt.plot(x[:,2], y[:,3], label ='Rate over time')
plt.xlabel('m')
plt.ylabel('r/m')
#plt.legend()

Обновление на основе ответа @aorr: Спасибо за помощь нам, новички.

Это наносит на график как O, так и G на оси Y с Date на оси X для каждого Id .И все отсортировано по дате.Отличная отправная точка для расширения с этими данными.Еще больше подписок на основе обновлений.

for Id in data['Id'].unique():
    fig, ax = plt.subplots(figsize=(5,3))
    plot_data = data.query("Id==@Id").sort_values('Date')
    _ = plot_data.plot(x='Date',y='O', ax=ax)
    _ = plot_data.plot(x='Date', y='G', ax=ax)
#Plot Company name in each chart
    for Company in plot_data[Company]:
        _ = plt.title(Company)
            #Plot Date2 Event onto X-axis
            for Date2 in plot_data[Date2]:
                _ = plt.axvline(Date2)     

1 Ответ

0 голосов
/ 22 мая 2018

Вы пытались решить эту проблему с pandas?Я не думаю, что вам нужно создавать numpy массивы для каждого элемента, pandas уже хранит их как ndarrays внутри.

import matplotlib.pyplot as plt

data = pd.read_csv('input_test.csv', parse_dates=['date'])

for id in data['id'].unique():
    fig, ax = plt.subplots(figsize=(5,3))
    plot_data = data.query("id==@id").sort_values('date')
    _ = plot_data.plot(x='O',y='G', ax=ax)

, что должно помочь вам в этом.Документы по визуализации панд здесь имеют множество других действительно полезных опций для быстрого исследования данных, но если вы привередливы к внешнему виду рисунка, вам нужно использовать прямую matplotlib для рисункаи топоры макетов.

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