在Pandas数据框中有条件地连接字符串

时间:2019-04-11 12:17:24

标签: python pandas concatenation conditional-statements

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

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,但这太具体了,我看不到如何将其应用于我的数据框。

2 个答案:

答案 0 :(得分:1)

您可以groupbySeries,由Source的{​​{3}}移到cumsumjoin来创建,最后使用双{ {3}}-第一个用于从Source移除第一级的MultiIndex,第二个用于列:

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

答案 1 :(得分: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"]))