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()
但是,当我寻找彼此相邻的重复值时,这会计算所有值。
答案 0 :(得分:4)
使用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