Условно объединенные строки в фрейме данных Pandas - PullRequest
1 голос
/ 11 апреля 2019

У меня есть датафрейм, похожий на:

ДФ:

      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 

Итак, для каждого нового экземпляра разговора агента / посетителя я хочу объединить текст разных вещей, сказанных одним человеком в новой ячейке.

Я нашел это сообщение , однако это слишком конкретная информация, и я не вижу, как применить это к моему фрейму данных.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вы можете 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
0 голосов
/ 11 апреля 2019

Попробуйте это.

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"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...