Результаты построения 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 для этих двух групп?
Ответы
Ответ 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]()