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

时间:2018-05-03 20:24:43

标签: 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       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)。要求是,对于每个'zone' and 'script'列,我需要在过去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列:

df2 = df1.groupby(['zone', 'script', df1['datetimecomplete'] - pd.Timedelta(days=1)])['script'].count() 

我试图完成的示例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

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

因此,如果我了解您的问题,您可以创建mask_24h以在过去24小时内从df1选择数据:

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选择df1[mask_date]内的groupby()数据,然后'zone''script'选择count(),然后继续执行reset_index() }。 rename()允许保留其他列并'datetimecomplete'重命名。现在您只是错过了df2['datetimecomplete'] = h24_ago 列,所以:

python -m rasa_nlu.server --path projects --response_log logs

希望它有效