累积计数但不是如果已经看到,则分配先前的计数值

Cumulative count but not if already seen, then assign previous count value

目前我只有第一列,如何创建第二列?具有累积计数的东西。如果已经看到一个项目,则不要累加计数,而是将已分配的值放在那里。比如下面table中的c&d.

df['Order Number'] = ?

Item Order Number
a 1
b 2
c 3
d 4
c 3
d 4
e 5
f 6
g 7

基于 Chris 的回答。如果您希望按字母顺序排序,请将排序更改为 True。

import pandas as pd

dict_d = {'Item': ['b', 'a','c','d','c','d','e','b','f','g']}
df = pd.DataFrame(data=dict_d)
df['Order Number'] = df.groupby(pd.Grouper(key='Item',sort=False)).ngroup()+1

print(df)

输出:

  Item  Order Number
0    b             1
1    a             2
2    c             3
3    d             4
4    c             3
5    d             4
6    e             5
7    b             1
8    f             6
9    g             7

编辑:要合并另一列,只需添加另一条石斑鱼。例如。

import pandas as pd

dict_d = {'Item': ['b', 'a','c','d','c','d','e','b','f','g'],
            'User_ID': ['111', '231','431','333','132','345','253','111','335','999']}
df = pd.DataFrame(data=dict_d)
df['Order Number'] = df.groupby([
    pd.Grouper(key='Item',sort=False),
    pd.Grouper(key='User_ID',sort=False)
]).ngroup()+1

print(df)

输出:

  Item User_ID  Order Number
0    b     111             2
1    a     231             1
2    c     431             4
3    d     333             5
4    c     132             3
5    d     345             6
6    e     253             7
7    b     111             2
8    f     335             8
9    g     999             9