Я хочу взять среднюю цену каждого уникального значения в каждом месяце - PullRequest
0 голосов
/ 21 февраля 2020

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

 input data:
listing_id  date       price    months
    1       2020-01-08  75.0    Jan
    1       2020-01-09  100.0   Jan
    1       2020-02-08  350.0   Feb
    2       2020-01-08  465.0   Jan
    2       2020-02-08  250.0   Feb
    2       2020-02-09  250.0   Feb

Output data:
listing_id  date        Avg_price      months
    1       2020-01-08  90.0           Jan
    1       2020-02-08  100.0          Feb
    2       2020-01-08  50.0           Jan
    2       2020-02-08  150.0          Feb

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вы можете получить среднюю цену за каждый месяц, используя groupby:

g = df.groupby("months")["price"].mean()

Затем вы можете создать новые столбцы:

for month, avg in g.iteritems():
    df["average_{}".format(month)] = avg

Пример с фиктивными данными:

import pandas as pd
df = pd.DataFrame({'months':['Jan', 'Feb', 'Feb', 'Mar', 'Mar', 'Mar'],
                   'price':[1, 2, 3, 4, 5, 6]})

Результат:

  months  price  average_Feb  average_Jan  average_Mar
0    Jan      1          2.5          1.0          5.0
1    Feb      2          2.5          1.0          5.0
2    Feb      3          2.5          1.0          5.0
3    Mar      4          2.5          1.0          5.0
4    Mar      5          2.5          1.0          5.0
5    Mar      6          2.5          1.0          5.0
0 голосов
/ 21 февраля 2020

Я проголосовал за ответ Дэна.
Это может помочь найти другой способ сделать это.
Кроме того, если у вас когда-либо есть данные, охватывающие несколько лет, вам может понадобиться столбец month_year.
Ссылка : https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html

Пример:

df = pd.DataFrame({'price':[i for i in range(121)]},
                  index=pd.date_range(start='12/1/2017',end='3/31/2018'))
df = df.reset_index()
df['month_year'] = df['index'].dt.month_name() + " " + 
                   df['index'].dt.year.astype(str)
df.pivot_table(values='price',columns='month_year')

Результат:

In [39]: df.pivot_table(values='price',columns='month_year')
Out[39]: 
month_year  December 2017  February 2018  January 2018  March 2018
price                15.0           75.5          46.0       105.0

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