更新:下面提供了SQL解决方案,但尚未提供pandas解决方案。如果有人有pandas解决方案,我很感激。
我有一个table/pandas dataframe,看起来像这样:
在每个用户的第一行总是由“新”指示的新组的情况下,则下一行可以在同一组(由“相同”指示)或新组(由“新”指示)中。
我想添加一个列group_number,它将为与其组相关的每一行创建一个数字,使得用户的第一组的所有行都是1,用户的第二组的所有行都是2,等等。在我的例子中,它看起来像这样:
我可以像下面的代码一样在pandas中迭代行,但是如果有一个矢量化的解决方案就更好了。:
group_number=[]
current_user=-1
for index, row in myDF.iterrows():
if row['user']!=current_user:
group_number.append(1)
counter=1
current_user=row['user']
elif row['group']=='same' :
group_number.append(counter)
else:
counter+=1
group_number.append(counter)
myDF['group_number']=group_number
(Side注意可能相关或不相关:我认为这个问题有一些味道的差距和岛屿结构/问题,但它是一个有点不同(我相信它是一个有点更一般)
如何在postgresql/sql和pandas(一个矢量化的解决方案)中创建group_number?
1条答案
按热度按时间2admgd591#
在Postgres SQL中,我们可以只计算每个用户的“新”行的窗口计数。假设你有一个列来排序你的记录,比如
id
:我将表列重命名为
mytable(usr, grp)
(因为user
和group
是SQL关键字)。新的组号出现在第三列rn
中。