Подтвердить что ты не робот

Результаты построения Pandas GroupBy

Я начинаю изучать Pandas и пытаюсь найти большинство способов Pythonic (или panda -thonic?) для выполнения определенных задач.

Предположим, что у нас есть DataFrame со столбцами A, B и C.

  • Столбец A содержит логические значения: каждая строка A имеет значение true или false.
  • В столбце B есть важные значения, которые мы хотим построить.

То, что мы хотим обнаружить, - это тонкие различия между значениями B для строк, для которых A установлено значение false, а также значения B для строк, которые имеют значение A.

Другими словами, , как я могу группировать по значению столбца A (true или false), затем отображать значения столбца B для обеих групп на одном и том же графе? Два набора данных должны окрашиваться по-разному, чтобы иметь возможность различать точки.


Затем добавьте еще одну функцию в эту программу: перед графикой мы хотим вычислить другое значение для каждой строки и сохранить ее в столбце D. Это значение является средним значением всех данных, хранящихся в B, за все пять минут до запись - но мы включаем только строки, которые имеют то же логическое значение, хранящееся в A.

Другими словами, , если у меня есть строка, где A=True и time=t, я хочу вычислить значение для столбца D, которое является средним значением B для всех записей от времени t-5 до t, которые имеют одинаковый A=True.

В этом случае, как мы можем выполнить groupby по значениям A, затем применить это вычисление к каждой отдельной группе и, наконец, построить значения D для этих двух групп?

4b9b3361

Ответ 1

Я думаю, что @herrfz поразил все высокие очки. Я просто уточню детали:

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

sin = np.sin
cos = np.cos
pi = np.pi
N = 100

x = np.linspace(0, pi, N)
a = sin(x)
b = cos(x)

df = pd.DataFrame({
    'A': [True]*N + [False]*N,
    'B': np.hstack((a,b))
    })

for key, grp in df.groupby(['A']):
    plt.plot(grp['B'], label=key)
    grp['D'] = pd.rolling_mean(grp['B'], window=5)    
    plt.plot(grp['D'], label='rolling ({k})'.format(k=key))
plt.legend(loc='best')    
plt.show()

enter image description here