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