Как использовать сгруппированные данные для построения средних значений осадков в определенных часовых диапазонах - PullRequest
0 голосов
/ 27 января 2019

Я извлек следующие данные из кадра данных.https://i.imgur.com/rCLfV83.jpg

Вопрос в том, как построить график, возможно, типа гистограммы, где горизонтальная ось - это часы в виде бинов [16:00 17:00 18:00 ... 24:00] и столбцы - это среднее количество осадков в течение каждого из этих часов.

Я просто еще не знаю достаточно панд, чтобы снять это с земли, поэтому мне нужна помощь.Пример данных ниже по запросу.

Date        Hours  `Precip`

1996-07-30  21        1

1996-08-17  16        1
            18        1
1996-08-30  16        1
            17        1
            19        5
            22        1
1996-09-30  19        5
            20        5
1996-10-06  20        1
            21        1
1996-10-19  18        4
1996-10-30  19        1
1996-11-05  20        3
1996-11-16  16        1
            19        1
1996-11-17  16        1
1996-11-29  16        1
1996-12-04  16        9
            17       27
            19        1
1996-12-12  19        1
1996-12-30  19       10
            22        1
1997-01-18  20        1

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Кажется, это легко, когда у вас есть данные. Я генерирую искусственные данные Pandas для этого примера:

import pandas as pd
import radar
import random

'''>>>   date'''
r2 =()
for a in range(1,51):
    t= (str(radar.random_datetime(start='1985-05-01', stop='1985-05-04')),)
    r2 = r2 + t

r3 =list(r2)
r3.sort()
#print(r3)
'''>>>  variable'''

x = [random.randint(0,16) for x in range(50)]
df= pd.DataFrame({'date': r3, 'measurement': x})
print(df)
'''order'''
col1 = df.join(df['date'].str.partition(' ')[[0,2]]).rename({0: 'daty', 2: 'godziny'}, axis=1)

col2 = df['measurement'].rename('pomiary')
p3 = pd.concat([col1, col2], axis=1, sort=False)

p3 = p3.drop(['measurement'], axis=1)
p3 = p3.drop(['date'], axis=1)

Время на сумму и участок:

dx = p3.groupby(['daty']).mean()
print(dx)
import matplotlib.pyplot as plt
dx.plot.bar()
plt.show()

График средних измерений

0 голосов
/ 27 января 2019

Кажется, df - это многоиндексный DataFrame после группового.

Преобразование индекса в DatetimeIndex

date_hour_idx = df.reset_index()[['Date', 'Hours']] \
                    .apply(lambda x: '{} {}:00'.format(x['Date'], x['Hours']), axis=1)
precip_series = df.reset_index()['Precip']
precip_series.index = pd.to_datetime(date_hour_idx)

Повторное считывание в часах, используя 'H'

# This will show NaN for hours without an entry
resampled_nan = precip_series.resample('H').asfreq()

# This will fill NaN with 0s
resampled_fillna = precip_series.resample('H').asfreq().fillna(0)

Если вы хотите, чтобы это было среднее значение за час, измените groupby(...).sum() на groupby(...).mean()

Вы также можете выполнить повторную выборку на другие интервалы -> Документация повторной выборки pandas

Подробнее о передискретизации DatetimeIndex -> https://pandas.pydata.org/pandas-docs/stable/reference/resampling.html

...