Как добавить новые столбцы в конце кадра данных, который содержит среднечасовые значения и соответствующее количество отсчетов для каждого среднего значения в час. - PullRequest
0 голосов
/ 09 декабря 2018

Я много искал, но не смог найти ответ на свою проблему.

У меня есть данные измерений солнечных элементов.Данные имеют значение метки времени, но не имеют частоты.Количество значений в час не является постоянным.В течение часа может произойти любое количество значений.Поэтому я изо всех сил пытаюсь создать:

i.Столбец с почасовыми средними данными.

ii.Еще один столбец, который содержит количество измерений, выполненных за каждый час.Это важно, поскольку у моей временной метки нет фиксированной частоты.Поэтому важно знать, имеет ли среднее значение, рассчитанное для определенного часа дня, например, 1, 2 или 14 измерений.

Изображение моего информационного кадра:

enter image description here

Мой код:

yr=df.index.year
mon=df.index.month
day= df.index.day
hr = df.index.hour
df.groupby([yr, mon, day, hr])['KP_sensor'].mean()

Как добавить два столбца в конце этого кадра данных (средний столбец и число подсчетов измерений, выполненных за этот час).

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вот одно из многих возможных решений.Вы уже сделали часть этого.

df["hour"] = df.index.hour
df["date"] = df.index.date

dfMeans = df.groupby(["date", "hour"])[["Sol_Data", "Irr_Unc_perc", "ISF_stable", "KP_sensor", "Tamb"]].mean()
dfMeans.reset_index(inplace=True)

dfHours = pd.DataFrame(df.groupby(["date", "hour"])["hour"].count())
dfHours.columns = ["count"]
dfHours.reset_index(inplace=True)

dfFinal = pd.merge(dfHours, dfMeans, how="left", on=["date","hour"])
0 голосов
/ 09 декабря 2018

На самом деле, глядя на вашу проблему, вам будет лучше использовать aggregate, потому что у вас есть несколько столбцов, которые вы хотите принять в качестве среднего значения.

yr=df.index.year
mon=df.index.month
day= df.index.day
hr = df.index.hour
grouped_data = df.groupby([yr, mon, day, hr])
new_data = grouped_data.agg('mean')
new_data['counts'] = grouped_data.transform('count')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...