Линейный участок на прокатную группу в Pandas - PullRequest
1 голос
/ 07 апреля 2020

У меня есть данные цвета, даты и значений. Я хотел бы взять скользящее среднее значение за 2 дня (столбец с именем x), сгруппированный по цвету. Затем постройте каждую группу отдельной строкой.

Я понял, как это сделать, сгруппировав, а затем развернувшись. Он отлично работает для этого небольшого набора данных, но Pivot выдает ошибку ValueError: Unstacked DataFrame is too big, causing int32 overflow на большом наборе данных, и, честно говоря, это кажется ненужным шагом, поэтому ищите альтернативный способ сделать это.

df = pd.DataFrame([['red', '2020-01-30', 0],
                   ['red', '2020-01-31', 1],
                   ['red', '2020-02-01', 2],
                   ['blue', '2020-01-27', 3],
                   ['blue', '2020-01-28', 4],
                   ['blue', '2020-01-29', 5],
                   ['blue', '2020-01-30', 6]], 
                  columns=['color', 'date', 'x'])
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S')

df.set_index('date', inplace=True)
df = df.groupby('color')['x'].rolling('2D').mean().reset_index()
df = df.pivot(index='date', columns='color', values='x')

df.plot()

enter image description here

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете использовать seaborn:

import seaborn as sns

df = df.groupby('color')['x'].rolling('2D').mean().reset_index()

sns.lineplot(data=df, x='date', y='x', hue='color')

Или использовать groupby:

fig, ax = plt.subplots()
for k, v in df.groupby('color'):
    v.plot(x='date', y='x', label=k, ax=ax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...