在Pandas身上找到当地的复制品(彼此跟随)

2024-05-03 11:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到本地的复制品,直接在熊猫身上给它们一个唯一的id

现实生活示例:

客户id多次出现的按时间顺序的购买数据(因为他每周访问商店多次),但我想确定客户同时购买多个项目的情况

我目前的做法如下:

def follow_ups(lst):
    lst2 = [None] + lst[:-1]
    i = 0
    l = []
    for e1, e2 in zip(lst, lst2):
        if e1 != e2:
            i += 1
        l.append(i)
    return l

follow_ups(['A', 'B', 'B', 'C', 'B', 'D', 'D', 'D', 'E', 'A', 'B', 'C'])
# [1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9]

# for pandas
df['out'] = follow_ups(df['test'])

但我觉得在熊猫身上可能有一种更简单、更干净的方法,而我却找不到

熊猫样本数据

import pandas as pd
df = pd.DataFrame({'test':['A', 'B', 'B', 'C', 'B', 'D', 'D', 'D', 'E', 'A', 'B', 'C']})
#    test
# 0     A
# 1     B
# 2     B
# 3     C
# 4     B
# 5     D
# 6     D
# 7     D
# 8     E
# 9     A
# 10    B
# 11    C

df_out = pd.DataFrame({'test':['A', 'B', 'B', 'C', 'B', 'D', 'D', 'D', 'E', 'A', 'B', 'C'], 'out':[1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9]})
#    test  out
# 0     A    1
# 1     B    2
# 2     B    2
# 3     C    3
# 4     B    4
# 5     D    5
# 6     D    5
# 7     D    5
# 8     E    6
# 9     A    7
# 10    B    8
# 11    C    9

1条回答
网友
1楼 · 发布于 2024-05-03 11:10:35

您可以使用shift()ne()比较您的列测试是否不等于它的移位版本,并在以下方面使用cumsum()

df['out'] = df['test'].ne(df['test'].shift()).cumsum()

其中打印:

df

   test  out
0     A    1
1     B    2
2     B    2
3     C    3
4     B    4
5     D    5
6     D    5
7     D    5
8     E    6
9     A    7
10    B    8
11    C    9

相关问题 更多 >