Python 添加条件计数器:基于其他列的值的计数器列
我有一张这样的桌子Python 添加条件计数器:基于其他列的值的计数器列,python,pandas,Python,Pandas,我有一张这样的桌子 id id2 val a red apple a red orange b blue fish c violet beef a yellow banana a black pork id id2 val counter a red apple 1 a red orange 1 b blue
id id2 val
a red apple
a red orange
b blue fish
c violet beef
a yellow banana
a black pork
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
我想根据id和id2的值创建一个计数器
例如,id是客户id,id2是订单id,val是订单中的项目名称。我想为客户id和订单id创建一个计数器。这就是为什么前两行应该有相同的计数器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
我试过了
df['counter']=df.groupby(['id','id2']).cumcount()+1
但这不是我想要的
我想要一个这样的结果表
id id2 val
a red apple
a red orange
b blue fish
c violet beef
a yellow banana
a black pork
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
谢谢,看起来您正在尝试计算对的唯一值
(id,id2)
:
您可以使用和:
我没有遵循预期的输出。为什么
黄香蕉
应该是2,而紫牛肉
只有1?对于id2
@roganjosh的每个唯一值,它是id
中的一个计数器。我只是补充了一些信息。例如id是客户id,id2是订单id,val是订单中的项目id。就像亚马逊订单上的一个篮子。我想为每个客户创建一个计数器数量的订单。嗨,安,这正是我需要的。非常感谢!你能解释一下pd.factorize(x)[0]是如何工作的吗。谢谢,这是一个分类标签编码器。。。它将每个唯一类别编码为一个整数,从0
开始,因此在第一个id
“a”中,类别“红色”将编码为0
,类别“黄色”将编码为1
,依此类推。因此需要使用.add(1)
获得所需的输出。由于我们在groupby
中使用它,每个id
中观察到的第一个类别将被编码为0