所以我需要通过SessionId对数据帧进行分组,然后我需要用创建的时间对每个组进行排序,之后我需要检索每个组的第n行。
但是我发现在应用lambda之后它变成了一个数据帧而不是一个逐个对象,因此我不能使用.nth属性
grouped = df.groupby(['SessionId'])
sorted = grouped.apply(lambda x: x.sort_values(["Created"], ascending = True))
sorted.nth ---> error
答案 0 :(得分:3)
在这种情况下,更改接近问题的顺序会有所帮助。如果您先排序然后使用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
是您的会话ID并且var1
是时间戳,则会按id
然后var1
对您的数据框进行排序。然后从这些已排序的组中选取n
行。 reset_index()
只是为了避免产生多索引。
如果您想获取每个组的最后n
行,可以使用.tail(n)
代替.nth(n)
。
答案 1 :(得分:1)