Python 如何从SQL like子句生成新的数据帧?

Python 如何从SQL like子句生成新的数据帧?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个这样的数据帧。我们称之为df1: zone script datetimecomplete 0 2.0 Consumers 2018-05-03 16:09:48 1 2.0 Inventory 2018-05-03 16:09:48 2 2.0 Orders_Details 2018-05-03 16:09:48 3 3.0 Consumers 2018-05-03 16:09:48 4 3.0

我有一个这样的数据帧。我们称之为df1:

  zone          script    datetimecomplete
0   2.0       Consumers 2018-05-03 16:09:48
1   2.0       Inventory 2018-05-03 16:09:48
2   2.0  Orders_Details 2018-05-03 16:09:48
3   3.0       Consumers 2018-05-03 16:09:48
4   3.0       Inventory 2018-05-03 16:09:48
5   3.0  Orders_Details 2018-05-03 16:09:48
6   6.0        Birthday 2018-05-03 16:09:48
我必须基于df1创建另一个数据帧df2。要求是,对于每个“区域”和“脚本”列,我需要生成过去24小时内的脚本计数,只需要比较日期而不是时间戳。只需要在datetimecomplete列为今天减去1天的位置追加行

df2需要有4列:

[zone, script, datetimecomplete, totalcount]
区域-与df1相同 脚本-与df1相同 datetimecomplete-当前日期减去1天需要追加到df2中 totalcount-需要是从今天起的最后24小时内每个脚本的计数

df2的示例:

 zone          script    datetimecomplete    totalcount
  2.0       Consumers 2018-05-02 16:09:48     2
  2.0       Inventory 2018-05-02 16:09:48     1
  2.0  Orders_Details 2018-05-02 16:09:48     1
  3.0       Consumers 2018-05-02 16:09:48     1
  3.0       Inventory 2018-05-02 16:09:48     1
  3.0  Orders_Details 2018-05-02 16:09:48     4
  6.0        Birthday 2018-05-02 16:09:48     6
我不知道该怎么做

到目前为止,代码为我获取计数,但不是df1最近24小时的计数,也没有创建totalcount列:

我正在尝试完成的SQL查询示例:

select df1.zone, df1.script, currentdate - 1 as [datetimecomplete], count(df1.zone) as [TotalCount]

from [df1] as a

where df1.datetimecomplete = currentdate - 1

group by df1.zone, df1.script

先谢谢你

因此,如果我理解,为了解决您的问题,您可以在24小时内创建一个掩码,从df1中选择过去24小时内的数据:

h24_ago = (pd.Timestamp.today() - pd.Timedelta(days=1)).date() # time 24h ago
mask_24h = df1['datetimecomplete'] >= h24_ago
然后,要创建df2,您可以使用groupby,但我会这样做:

df2 = df1[mask_24h ].groupby(['zone','script']).\
         count().reset_index().rename(columns = {'datetimecomplete':'totalcount'})
在这里,您使用df1[mask_date]在过去24小时内从df1中选择数据,然后按“区域”和“脚本”分组并继续计数。reset_index允许保留其他列并重命名为rename。现在您只是缺少了“datetimecomplete”列,因此请执行以下操作:


希望它能工作

示例中显示的df1是否足以生成df2?我的意思是,我没有看到生日脚本的6个计数。@HarvIpan 6不是计数,而是一个内部代码。我想有足够的理由让df2I实际上是指totalcount作为生日礼物。嗨,谢谢你的回复,这就是我需要的。但是,日期比较不起作用。当没有记录少于今天减去df1中的1天时,我的总数仍然是1。计数应该是零。有没有办法只比较日期而不比较时间戳?@RustyShackleford我不太明白,当你说日期时,你指的是当天?就像你想让所有的脚本都在昨天运行,或者从现在到昨天午夜运行?没错,我指的是当天。我认为脚本在现在和昨天午夜之间运行。@RustyShackleford看到了我的编辑,但我想你是按照你的回复做的,因为:
df2 = df1[mask_24h ].groupby(['zone','script']).\
         count().reset_index().rename(columns = {'datetimecomplete':'totalcount'})
df2['datetimecomplete'] = h24_ago