我的数据框如下所示,我的目的是pandas.groupby
在学生的名字上,找出他们在“英语”和“印地语”之间做了什么活动
data ={'StudentId':['AAdams','AAdams','AAdams','AAdams','AAdams','AAdams',
'BBrooks','BBrooks','BBrooks','BBrooks','BBrooks',],
'activity':['came school','english','lunch','hindi','sports','left school','came school','english','read','hindi','left school'],
'month':[11,11,11,11,12,12,12,12,12,1,1]}
pd.DataFrame(data)
StudentId activity month
0 AAdams came school 11
1 AAdams english 11
2 AAdams lunch 11
3 AAdams hindi 11
4 AAdams sports 12
5 AAdams left school 12
6 BBrooks came school 12
7 BBrooks english 12
8 BBrooks read 12
9 BBrooks hindi 1
10 BBrooks left school 1
到目前为止我试过的或者我知道的是
df[df.b.eq('english').groupby(df.StudentId).cumsum()].reset_index(drop=True)
or
df.groupby('StudentId').apply(lambda x: x.loc[(x.b == 'english').idxmax():,:])
.reset_index(drop=True)
然后削减我的数据帧,然后我可以做下面的代码
df.groupby('StudentId').head(5)
最终的数据帧或输出应该看起来像activity=english和activity=hindi之间的活动
StudentId activity month
1 AAdams english 11
2 AAdams lunch 11
3 AAdams hindi 11
7 BBrooks english 12
8 BBrooks read 12
9 BBrooks hindi 1
如果每个组的第一个值是
english
,第二个值是hindi
,则为解决方案。你知道吗通过^{} 为第一个和第二个需要创建布尔掩码,通过} 过滤:
[::-1]
索引从后面排序,通过&
创建最后一个链掩码,并通过^{相关问题 更多 >
编程相关推荐