有条件地连接Pandas数据帧中的字符串

问题描述 投票:1回答:2

我有一个看起来像这样的数据框:

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,但这太具体了,我不知道如何将它应用到我的数据帧。

python pandas concatenation condition
2个回答
1
投票

你可以groupbySeries创建的cumsumSourceshift创建的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

0
投票

试试这个。

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"]))
© www.soinside.com 2019 - 2024. All rights reserved.