我有这样的数据框。我们称之为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
提前谢谢你。
答案 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
希望它有效