添加条件计数器:基于其他列的值的计数器列

2024-06-16 09:06:29 发布

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

我有一张这样的桌子

id    id2      val
a     red      apple
a     red      orange
b     blue     fish
c     violet   beef
a     yellow   banana
a     black    pork

我想根据id和id2的值创建一个计数器。你知道吗

例如,id是客户id,id2是订单id,val是订单中的项目名称。我想为customer id和order id创建一个counter,这就是为什么前两行应该有相同的counter 1

我试过cumcount,但他们会给我这样的东西

id    id2      val      counter
a     red      apple    1
a     red      orange   2
b     blue     fish     1
c     violet   beef     1
a     yellow   banana   1
a     black    pork     1

我试过cumcount

df['counter'] = df.groupby(['id','id2']).cumcount() + 1

但这不是我想要的

我想要这样的结果表

id    id2      val      counter
a     red      apple    1
a     red      orange   1
b     blue     fish     1
c     violet   beef     1
a     yellow   banana   2
a     black    pork     3

谢谢你


Tags: idapplecountervalblueredbananablack
2条回答

看起来您正在尝试计算对的唯一值(id, id2)

uniques = df.drop_duplicates(subset=['id','id2']).groupby('id').cumcount()+1
df['counter'] = uniques.reindex(df.index).ffill().astype(int)

可以使用^{}^{}

df['counter'] = df.groupby(['id'])['id2'].transform(lambda x: pd.factorize(x)[0]).add(1)

  id     id2     val  counter
0  a     red   apple        1
1  a     red  orange        1
2  b    blue    fish        1
3  c  violet    beef        1
4  a  yellow  banana        2
5  a   black    pork        3

相关问题 更多 >