Вместо агрегат вы можете использовать apply .
Run:
pdf.groupby('name').text.apply(lambda grp: ' '.join(grp),
meta=('text', 'object')).compute()
Если вы хотите отсортировать результат по индексу , сделайте это на уровне Pandas (после compute () ), добавив .sort_index()
к приведенному выше коду.
Другое решение на основе пользовательской агрегации:
import itertools as it
(будет использоваться ниже).
Определите следующую пользовательскую агрегацию:
collect_concat = dd.Aggregation(name='collect_concat',
chunk=lambda s1: s1.apply(list),
agg=lambda s2: s2.apply(lambda chunks: list(it.chain.from_iterable(chunks))),
finalize=lambda s3: s3.apply(lambda xx: ' '.join(xx))
)
Вычислить результат:
pdf.groupby('name').text.agg(collect_concat).compute()
На этот раз результат упорядочен по name .