Python Pandas groupby,带有正则表达式,可捕获串联的不需要的元素

Python Pandas groupby,带有正则表达式,可捕获串联的不需要的元素,python,pandas,datetime,pandas-groupby,Python,Pandas,Datetime,Pandas Groupby,这是我第一次发帖,所以我希望这篇文章有足够的文档来解释我的问题 我正在处理美国国家海洋和大气管理局(NOAA)25多年的风向和风速数据,这些数据我已经清理并加载到熊猫数据框中。我能够成功地按月对数据进行排序,使用以下方法将我的结果隔离到每年7月: in: july_df = df[df['date'].str.contains('\d{4}\-(7|07)', regex=True)] in: july_df.head(5) Out: date time dir

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

我正在处理美国国家海洋和大气管理局(NOAA)25多年的风向和风速数据,这些数据我已经清理并加载到熊猫数据框中。我能够成功地按月对数据进行排序,使用以下方法将我的结果隔离到每年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'])

谢谢你的帮助。我无法让它满足我的需要。然而,一位朋友建议我尝试一下:-将日期字段转换为使用pandates datetime df['date']=pd.to_datetime(df['date'])-然后,过滤我想要的月份和天数:df.loc[(df['date'].dt.month==07)和(df['date'].dt.day==14)],到目前为止,这似乎已经解决了我的问题。