因此,我需要按其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/