如何使用分组数据绘制特定小时范围内的降雨量平均值

时间:2019-01-27 04:15:53

标签: pandas matplotlib seaborn pandas-groupby

我从一个数据帧中提取了以下数据。 https://i.imgur.com/rCLfV83.jpg

问题是,我该如何绘制图形(可能是直方图类型),其中水平轴是以小时为单位的小时数[16:00 17:00 18:00 ... 24:00]而条形图是每个小时的平均降雨量。

我只是还不了解足够的大熊猫,所以我需要一些帮助。根据要求提供以下示例数据。

transporter.verify((err, success) => {
    if (err) 
        console.error(err);
    else
        console.log('Your config is correct');
});

2 个答案:

答案 0 :(得分:1)

似乎df是groupby之后的多索引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 resample documentation

有关重新采样DatetimeIndex->​​ https://pandas.pydata.org/pandas-docs/stable/reference/resampling.html

的更多信息

答案 1 :(得分:0)

拥有数据似乎很容易。 在此示例中,我通过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()

Plot of the mean measurements