Pandas 使用正则表达式的 groupby 连续捕获不需要的元素

Pandas groupby with regex capturing unwanted elements in series

这是我第一次发帖,所以我希望有足够的文档来解释我遇到的问题。

我正在处理 25 多年的 NOAA 风向和风速数据,我已经清理并加载到 Pandas 数据框中。我能够成功地按月对数据进行排序,使用以下方法将我的结果隔离到每年的 7 月:

in: july_df = df[df['date'].str.contains('\d{4}\-(7|07)', regex=True)]
in: july_df.head(5)
Out: 
             date   time  direction  speed
24732  1992-07-01  00:00      128.0    4.1
24733  1992-07-01  00:10      120.0    3.3
24734  1992-07-01  00:20      117.0    3.2
24735  1992-07-01  00:30      108.0    3.1
24736  1992-07-01  00:40      112.0    2.9

然而,当我尝试进一步分离数据,仅根据 7 月份的每日读数对其进行分组时,我始终从第一天开始获得一些读数,并且这些读数的数量似乎根据我想一次查看多少条目。在这里,我试着分组 7 月 14 日:

in: july_14 = july_df.groupby(df.date.str.contains("\d{4}\-07\-14", regex=True))
in: july_14.head(5)
out: 
             date   time  direction  speed
24732  1992-07-01  00:00      128.0    4.1
24733  1992-07-01  00:10      120.0    3.3
24734  1992-07-01  00:20      117.0    3.2
24735  1992-07-01  00:30      108.0    3.1
24736  1992-07-01  00:40      112.0    2.9
26532  1992-07-14  00:00       91.0    4.3
26533  1992-07-14  00:10       82.0    4.2
26534  1992-07-14  00:20       78.0    4.6
26535  1992-07-14  00:30       73.0    4.6
26536  1992-07-14  00:40       71.0    4.2

我预计像我以前那样分组只会输出与 7 月 14 日相关的结果,这是我想更仔细地分析的日期。

我认为问题出在我使用的正则表达式中。例如,如果我将输入更改为不在数据集中的一天(7 月 32 日),我仍然会得到 7 月 1 日的结果:

in: july_14 = july_df.groupby(df.date.str.contains("\d{4}\-07\-32", regex=True))
in: july_14.head()
out: 
             date   time  direction  speed
24732  1992-07-01  00:00      128.0    4.1
24733  1992-07-01  00:10      120.0    3.3
24734  1992-07-01  00:20      117.0    3.2
24735  1992-07-01  00:30      108.0    3.1
24736  1992-07-01  00:40      112.0    2.9

当我按年份分组时,我什至得到了这种不稳定的结果:

print july_df.groupby(july_df.date.str.contains("2001", regex=True)).head(5)
              date   time  direction  speed
24732   1992-07-01  00:00      128.0    4.1
24733   1992-07-01  00:10      120.0    3.3
24734   1992-07-01  00:20      117.0    3.2
24735   1992-07-01  00:30      108.0    3.1
24736   1992-07-01  00:40      112.0    2.9
374667  2001-07-01  00:00       96.0    4.7
374668  2001-07-01  00:10       98.0    5.1
374669  2001-07-01  00:20      100.0    5.4
374670  2001-07-01  00:30       97.0    5.3
374671  2001-07-01  00:40       83.0    5.1

谁能指出我的错误?

感谢您的帮助。如果没有充分记录或重复问题,请告诉我。

你能试试下面的方法吗,先筛选需要的日期,然后分组

july_df[july_df['date'].str.contains('\d{4}-07-14')].groupby(['date','time']).agg(['count'])