问题描述
目前我只有第一列,如何创建第二列?有累积计数的东西。如果已经看到某个项目,则不要累计计数,而是将已分配的值放在那里。比如下表中的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