мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
python:week21 [08/10/2018 05:02] – [Группировка] ybezrukovpython:week21 [08/10/2018 13:42] (текущий) – [Группировка] ybezrukov
Строка 64: Строка 64:
 df.apply(np.sum, axis=1) df.apply(np.sum, axis=1)
 </code> </code>
- 
- 
-===== Слияние ===== 
- 
-==== Конкатенация ==== 
  
 ===== Группировка ===== ===== Группировка =====
Строка 121: Строка 116:
 </code> </code>
  
-Группировать можно и иерархически, например указав два стобца+Группировать можно и иерархически, например указав два столбца
  
 <code python> <code python>
Строка 137: Строка 132:
     three  1.928123 -1.623033     three  1.928123 -1.623033
     two    2.414034  1.600434     two    2.414034  1.600434
 +</code>
 +
 +Все значения из столбцов можно объединить с помощью другой функции
 +
 +<code python>
 +df.groupby(['A', 'B']).agg(lambda x: ','.join(x))
 +</code>
 +
 +Или
 +
 +<code python>
 +df.groupby(['A', 'B']).apply(list))
 +</code>
 +
 +
 +После группировки столбцы A и B стали элементами составного индекса. Но это не помешает фильтровать строки по значениями этого индекса
 +<code python>
 +df.index.get_level_values('A')
 </code> </code>
  
 ===== Временные последовательности ===== ===== Временные последовательности =====
  
-Временная последовательность --  это пара +Временная последовательность отражает зависимость некоторого параметра от времени, например среднюю температуру в городе за историю наблюдений или курс акций по дням. pandas имеет простой и мощный интерфейс для работы с данными такого типа (например, если данные записаны с точностью до секунды их легко преобразовать в пятиминутные).  
 + 
 +Создадим такую временную последовательность 
 + 
 +<code python> 
 + 
 +rng = pd.date_range('1/1/2011', periods=72, freq='H') # Создадим временной диапазон: 72 часа начиная с 1 января 2011 
 + 
 +ts = pd.Series(np.random.randn(len(rng)), index=rng) # Используем его в качестве индекса для случайной величины 
 + 
 +print(ts.head()) 
 +</code> 
 + 
 +<code> 
 +2011-01-01 00:00:00    0.469112 
 +2011-01-01 01:00:00   -0.282863 
 +2011-01-01 02:00:00   -1.509059 
 +2011-01-01 03:00:00   -1.135632 
 +2011-01-01 04:00:00    1.212112 
 +Freq: H, dtype: float64 
 +</code> 
 + 
 +Посчитаем, например, среднее значение по дням  
 + 
 +<code python> 
 +print(ts.resample('D').mean()) 
 +</code>   
 + 
 +<code> 
 +2011-01-01   -0.319569 
 +2011-01-02   -0.337703 
 +2011-01-03    0.117258 
 +Freq: D, dtype: float64 
 +</code> 
 + 
 +Здесь мы встретились с операцией передискретизации или ресемплинга. Эта операция изменяет частоту с которой записаны значения параметра, в нашем примере мы уменьшили эту частоту в 24 раза: с 1 часа до 1 дня (resample()), в качестве нового значения выбрали среднее (mean()). 
 + 
 +===== Диаграммы ===== 
 +pandas был бы не pandas если бы не давал возможности легко нарисовать таблицу на диаграмме. Для отображения картинки библиотека использует уже знакомый matplotlib. 
 + 
 +Например 
 + 
 +<code python> 
 +ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) # Создадим случайный набор данных с датами в качестве индекса 
 +ts = ts.cumsum() # Посчитаем кумулятивную сумму для всех значений 
 + 
 +ts.plot() #  и отобразим ее на экране 
 +</code> 
 + 
 +{{:python:series_plot_basic.png?400|}} 
 + 
 +Можно рисовать значения и из таблиц с множеством столбцов 
 + 
 +<code python> 
 +df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,columns=['A', 'B', 'C', 'D']) 
 +df = df.cumsum() 
 +plt.figure() 
 +df.plot() 
 +plt.legend(loc='best'
 +</code> 
 + 
 +====== Задача 6 ====== 
 +Решить задачу 5 с помощью функции группировки 
 + 
 + 
 +====== Задача 7 ====== 
 +Найти наибольшую и наименьшую температуры  
 +- за всю историю наблюдений 
 +- за год 
 +- за месяц 
 + 
 +====== Задача 8 ====== 
 +Нарисовать среднее значение температуры по годам и месяцам 
 + 
 +====== Задача 9 ====== 
 +Найти год с самым жарким месяцем