累积计数,但如果没有看到,则分配先前的计数值

问题描述

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

df['订单号'] = ?

项目 订单号
1
b 2
c 3
d 4
c 3
d 4
e 5
f 6
g 7

解决方法

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

import pandas as pd

dict_d = {'Item': ['b','a','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','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