我有一个看起来像这样的数据框:
DF:
Source Text
Agent aa
Agent ab
Visitor ac
Agent ad
Visitor ae
Visitor ba
Visitor bb
Agent bc
Agent bd
Agent be
我想创建一个新的数据框,看起来如下:
Source Text
Agent aa ab
Visitor ac
Agent ad
Visitor ae ba bb
Agent bc bd be
因此,对于代理/访问者谈话的每个新实例,我想连接一个人在新单元格中所说的不同事物的文本。
我找到了this post,但这太具体了,我不知道如何将它应用到我的数据帧。
你可以groupby
由Series
创建的cumsum
由Source
和shift
创建的join
,最后使用double Series.reset_index
- 首先删除第一级MultiIndex,第二级用于Source
列:
g = df['Source'].ne(df['Source'].shift()).cumsum()
df1 = (df.groupby([g, 'Source'])['Text']
.apply(' '.join)
.reset_index(level=0, drop=True)
.reset_index())
print (df1)
Source Text
0 Agent aa ab
1 Visitor ac
2 Agent ad
3 Visitor ae ba bb
4 Agent bc bd be
试试这个。
d=df.groupby("Source").groups
print(pd.DataFrame([ [k,' '.join(list(df.groupby("Source").get_group(k)["Text"]))] for k in d.keys() ],columns=["Source","Text"]))