因此,我需要按其SessionId对数据帧进行分组,然后我需要使用创建的时间对每个组进行排序,然后只需要检索每个组的第n行。

但是我发现在应用lambda之后,它变成了一个数据框,而不是按对象分组,因此我无法使用.nth属性

grouped = df.groupby(['SessionId'])

sorted = grouped.apply(lambda x: x.sort_values(["Created"], ascending = True))

sorted.nth  ---> error

最佳答案

在这种情况下,更改解决问题的顺序将有所帮助。如果先排序然后使用groupby,则将获得所需的输出,并且可以使用groupby.nth函数。

这是一个代码片段来演示这个想法:

df = pd.DataFrame({'id':['a','a','a','b','b','b'],
                  'var1':[3,2,1,8,7,6],
                  'var2':['g','h','i','j','k','l']})

n = 2 # replace with required row from each group

df.sort_values(['id','var1']).groupby('id').nth(n).reset_index()


假设id是您的sessionid,并且var1是时间戳,这将按照id然后是var1对数据帧进行排序。然后从每个已排序的组中选择第n行。 reset_index()只是为了避免产生多重索引。

如果要获取每个组的最后n行,可以使用.tail(n)代替.nth(n)

关于python - 在python中的groupby上应用lambda后获得第n行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49685215/

10-12 20:36