【问题标题】:Adding unique values in the output in Pandas在 Pandas 的输出中添加唯一值
【发布时间】:2018-10-08 16:34:46
【问题描述】:
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()

但是当我在寻找彼此相邻的重复值时,这会计算所有值的总和。

【问题讨论】:

    标签: python python-3.x pandas pandas-groupby


    【解决方案1】:

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

    【讨论】:

    • 我尝试运行它,但我得到了错误 'invalid syntax' for 'yield f'{i}x{l}'
    • 您使用的是 Python 3.6+ 吗?我添加了适用于旧版本的行,只需将当前行替换为注释中的行
    • 我使用的是 Python 3.5.4
    • 好的。然后将该行替换为yield '{i} x{l}'.format(i=i, l=l)
    • 在 Python 3.6 中,添加了一个名为 f-strings 的功能,它允许将代码直接放在格式化的字符串中,并将代码的结果保存在输出中。在早期版本的 Python 中,您必须使用 str.format 来实现相同的行为
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多