我有一个问题,关于仅将某些行分组在pandas数据框中(按时间戳排序),具体取决于它们的列值。
所以这是一个例子:
df=pd.DataFrame({"text":["Hello.",
"I had a question.",
"Hi!",
"Yes how can I help?",
"Do you ship to the UK?"
],
"timestamp":[
pd.Timestamp('20131213 11:50:00'),
pd.Timestamp('20131213 11:51:00'),
pd.Timestamp('20131213 11:52:00'),
pd.Timestamp('20131213 11:53:00'),
pd.Timestamp('20131213 11:54:00')
],
"direction":["In","In","Out","Out","In"]})
数据框如下所示:
此数据帧按时间戳排序,并且可以是(例如)聊天线程,其中“进入”方向可以是一个人在说话,而“出去”是另一个人在说话。
在最后一个数据帧中,如果行的方向相同,则将行的文本分组为一行,但是直到到达具有不同方向的行时,行才被分组为一行。并且消息的顺序被保留。
有人有什么想法吗?
怎么做这样的事情:
# indicate direction changes
df['dir'] = df.direction.shift(1).bfill()
df['dir_change'] = df.apply(lambda x: 1 if x.direction != x.dir else 0, axis=1)
# create new groups
df['new_group'] = df.dir_change.cumsum()
# group on new groups and aggregate the text
agg_df = df.groupby('new_group').agg({'text':lambda x: ' '.join(list(x)), 'timestamp':'first'})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句