Python 在Pandas中的输出中添加唯一值

Python 在Pandas中的输出中添加唯一值,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas Groupby,我之前在代码方面得到了一些帮助,但现在我被困在另一个步骤上。。。 当前输出如下所示: 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'

我之前在代码方面得到了一些帮助,但现在我被困在另一个步骤上。。。 当前输出如下所示:

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 
但我需要聚合类似的值,以便输出如下所示:

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 

但当我查找彼此相邻的重复值时,这将计算所有值的总数。

使用
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))


我试着运行这个,但是我得到了“yield f{I}x{l}”的错误“invalid syntax”,你在使用Python 3.6+?我在一行代码中添加了适用于旧版本的代码,只需将当前代码替换为注释中的代码即可。我正在使用Python 3.5.4OK。然后将该行替换为
yield'{i}x{l}'。format(i=i,l=l)
在Python 3.6中,添加了一个名为f-strings的特性,它允许将代码直接放在格式化字符串中,并且代码的结果保存在输出中。在Python的早期版本中,必须使用
str.format
来实现相同的行为
numbers
1                   red --> green --> blue x3
2    yellow --> purple --> blue --> purple x2
3           red --> blue x2 --> green --> red
Name: colors, dtype: object