Добавление уникальных значений в выводе в Pandas - PullRequest
0 голосов
/ 08 октября 2018
import pandas as pd
data = {'numbers' : [1, 2, 3, 1, 3, 2, 2, 3, 3, 1, 2, 1, 1, 2, 3],
'colors' : ['red', 'yellow', 'red', 'green', 'blue', 'purple', 'blue', 'blue', 'green', 'blue', 'purple', 'blue', 'blue', 'purple', 'red']}
df = pd.DataFrame(data)

temp = df.groupby('numbers').colors.apply(' --> '.join)

Я получил некоторую помощь с моим кодом ранее, но теперь я застрял на другом шаге ... Токовый вывод выглядит так:

1 red --> green --> blue --> blue --> blue
2 yellow --> purple --> blue --> purple --> purple
3 red --> blue --> blue --> green --> red 

Но мне нужно агрегировать аналогичные значениятак что вывод будет выглядеть так:

1 red --> green --> blue x3
2 yellow --> purple --> blue --> purple x2
3 red --> blue x2 --> green --> red 

Я пытался использовать такие вещи, как

['colors'].count()

Но это подсчитывает все значения в целом, когда я ищу дубликаты значенийрядом друг с другом.

1 Ответ

0 голосов
/ 08 октября 2018

Определение пользовательской функции с помощью itertools.groupby:

Настройка

import itertools

def foo(arr):
    for i, g in itertools.groupby(arr):
        l = len(list(g))
        if l > 1:
            yield f'{i} x{l}'   # yield '{i} x{l}'.format(i=i, l=l)
        else:
            yield i

def bar(vals):
    return ' --> '.join(foo(vals))

Сейчас apply:

df.groupby('numbers').colors.apply(bar)

numbers
1                   red --> green --> blue x3
2    yellow --> purple --> blue --> purple x2
3           red --> blue x2 --> green --> red
Name: colors, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...