Объединение строк в кадре данных в зависимости от другого столбца - PullRequest
0 голосов
/ 24 сентября 2018

Я извлек pdf в фрейм данных и хотел бы объединить строки, если столбец B - это тот же динамик:

От:

  Index     Column B     Column C 
   1       'I am going'    Speaker A 
   2       'to the zoo'    Speaker A
   3       'I am going'    Speaker B 
   4       'home      '    Speaker B
   5       'I am going'    Speaker A 
   6       'to the park'   Speaker A

Кому:

  Index     Column B                    Column C 
   1       'I am going to the zoo '    Speaker A 
   2       'I am going home'           Speaker B
   3       'I am going to the park'    Speaker A 

Я пытался использовать groupby, но порядок важен в контексте PDF, который является речью.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете использовать GroupBy + agg после создания серии, определяющей, когда изменяется столбец C:

res = df.assign(key=df['Column C'].ne(df['Column C'].shift()).cumsum())\
        .groupby('key').agg({'Column C': 'first', 'Column B': ' '.join})\
        .reset_index()

print(res)

   key   Column C                    Column B
0    1  Speaker A   'I am going' 'to the zoo'
1    2  Speaker B   'I am going' 'home      '
2    3  Speaker A  'I am going' 'to the park'

Обратите внимание, что вывод содержит кавычки в соответствии с введенным вами вводом.Они не будут отображаться, если строки определены без кавычек.

0 голосов
/ 24 сентября 2018

Используйте groupby и agg, как указано ниже:

import pandas as pd
from functools import reduce
data = {'col1': [1,1,2,2,3], 'col2': ['foo', 'bar', 'baz', 'bag', 'bat']}
df = pd.DataFrame(data)
print(df)
aggregated = df.groupby('col1').agg(lambda x: reduce(lambda s1, s2: s1 + s2, x))
print(aggregated)

Будет выдавать следующий вывод:

col1 col2
0     1  foo
1     1  bar
2     2  baz
3     2  bag
4     3  bat

        col2
col1
1     foobar
2     bazbag
3        bat
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...