我有一个数据集,其中包含“ UI”(唯一ID),时间,频率(UI列中给定值的频率),如下所示:
我想添加一个名为'daily_frequency'的新列,该列简单地按顺序计算给定日期的UI列中的每个唯一值,如下图所示。
例如,如果UI = 114737并在一天内重复2次,则我们在daily_frequency列中应该有1和2。
我可以使用group by和cumcount方法对Python和Panda包进行以下操作...
df['daily_frequency'] = df.groupby(['UI','day']).cumcount()+1
但是,由于某些原因,我必须通过SQL查询(Amazon Redshift)执行此操作。
答案 0 :(得分:2)
我认为您想要一个连续的计数,可以计算为:
COUNT(*) OVER (PARTITION BY ui, TRUNC(time) ORDER BY time
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS daily_frequency
答案 1 :(得分:0)
尽管Salman的答案似乎是正确的,但我认为ROW_NUMBER()
更简单:
COUNT(*) OVER (PARTITION BY ui, time::date
ORDER BY time
) AS daily_frequency