从小时数据中获取月最大值

2024-06-16 09:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大型数据集,由过去14年中每小时测量的潮位组成,我正在尝试创建一个新的数据框架,该框架具有每个月的最大潮位值及其相关日期

所以我需要得到每个月的最大潮汐值以及与之相关的日期

我有点接近我想要的,但我可以告诉有一个错误的地方

以下是原始数据集的示例: Original

这是我用来生成输出的语法:

df['Date'] = pd.to_datetime(df['Date'], format = '%Y-%m-%d %H:%M:%S',errors = 'ignore')
ddf = df.groupby(pd.Grouper(key = 'Date',freq = 'M')).max()

这使我获得了以下输出: Output

起初一切看起来都很好(格式正确),但后来我注意到它只是列出了每个月的最后一天,所以我觉得我在某处犯了一个简单的错误

我是Python新手,这是我在这里的第一篇帖子,所以如果我的帖子的任何部分格式不正确,我会提前道歉


Tags: 数据框架示例df原始数据date格式地方
2条回答

我创建了一些示例数据,以更好地说明我相信您正在尝试做的事情

然后,您可以使用^{}通过以下方式获得每个月最大值的索引位置data

df.groupby(pd.Grouper(key='Date', freq='M'))['data'].idxmax()

然后使用loc在这些每月最大值上对数据帧进行子集(如果您愿意,还可以附加.set_index('Date')作为索引)

np.random.seed(0)
timestamps = pd.DatetimeIndex(start='2020-01-01', end='2020-10-01', freq='1h')
data = np.random.randn(len(timestamps))
df = pd.DataFrame({'Date': timestamps, 'data': data})

monthly_max_vals = df.groupby(
    pd.Grouper(key='Date', freq='M'))['data'].idxmax()

>>> df.loc[monthly_max_vals].reset_index(drop=True)
                 Date      data
0 2020-01-21 14:00:00  2.696224
1 2020-02-13 22:00:00  3.170975
2 2020-03-26 20:00:00  2.929096
3 2020-04-05 14:00:00  2.464322
4 2020-05-09 22:00:00  3.801660
5 2020-06-08 10:00:00  2.600672
6 2020-07-23 13:00:00  2.979976
7 2020-08-23 16:00:00  2.841767
8 2020-09-30 17:00:00  2.944984
9 2020-10-01 00:00:00  0.817049

默认情况下,月频率(M)使用月末。如果你想要月初,你需要月初。(MS)

例如:

np.random.seed(0)
timestamps = pd.DatetimeIndex(start='2020-01-01', end='2020-10-01', freq='1h')
df = pd.DataFrame({'Date': timestamps, 'data': np.random.randn(len(timestamps))})
df = df.groupby(pd.Grouper(key = 'Date', freq = 'MS')).max()

有关更多信息,请参见this table

相关问题 更多 >