如何实现这一点?
我能想到的是,
A['new'] = A[['sth', 'content']].apply(tuple, axis=1)
A.groupby('ID')['new'].apply(list)
但这只是这样
[[(you,A),(me,V),(me,G),(me,K),(you,D)],[(you,L),(me,A),(me,B),(me,c),(me,G)],[(me,G),(you,YT),(you,TY),(me,TY),(you,Q),(me,U)]]
有数据帧(让它成为 A):
id sth content
qwea you A
qwea me V
qwea me G
qwea me K
qwea you D
qfzx you L
qfzx me M
qfzx me A
qfzx me B
qfzx me c
gg1234 me G
gg1234 you YT
gg1234 you TY
gg1234 me TY
gg1234 you Q
gg1234 me U
我想要实现的目标:
[[(you,A),(me,V,G,K),(you,D)],[(you,L),(me,A,B,c,G)],[(me,G),(you,YT,TY),(me,TY),(you,Q),(me,U)]]
这是
使用shift
创建帮助键,这是您问题的关键部分,之后我所做的只是将输出重新格式化为您需要的内容
df['key']=(df.sth!=df.groupby('id').sth.shift()).ne(0).cumsum()
s=df.groupby(['id','key','sth']).content.apply(list).reset_index(level=2)
l=(s.sth.apply(lambda x :[x])+s.content).apply(tuple).sort_index(level=1).groupby(level=0).apply(list).tolist()
l
[[('me', 'G'), ('you', 'YT', 'TY'), ('me', 'TY'), ('you', 'Q'), ('me', 'U')], [('you', 'L'), ('me', 'M', 'A', 'B', 'c')], [('you', 'A'), ('me', 'V', 'G', 'K'), ('you', 'D')]]