Pandas数据框中每天新出现的次数(不是计数或总和)
想象一下,我有一个像下面这样的数据框,我将每天看到的每只动物记录为一个新行。
Day Animal
1 Lion
1 Elephant
1 Giraffe
1 Elephant
2 Elephant
2 Rhino
2 Rhino
2 Lion
2 Elephant
我想创建一个新列,其中包含1每天看到的第一只动物(以及当天每次看到同一只动物时),并包含2下一只动物,依此类推。上面示例的结果应如下所示:
Day Animal Number
1 Lion 1
1 Elephant 2
1 Giraffe 3
1 Elephant 2
2 Elephant 1
2 Rhino 2
2 Rhino 2
2 Lion 3
2 Elephant 1
请注意,这是一个简化的示例。我知道在上面的这个例子中,人们可能更喜欢使用组合groupby和count计算每天的出现次数(例如总结每天出现的次数 pandas)。但是,在我的现实世界中情况并非如此。我需要给它们编号,以便以后可以将这些数字用于其他用途。
回答
您可以使用series.factorize超过groupby.transform
df['Number'] = df.groupby("Day")['Animal'].transform(lambda x: x.factorize()[0])+1
print(df)
Day Animal Number
0 1 Lion 1
1 1 Elephant 2
2 1 Giraffe 3
3 1 Elephant 2
4 2 Elephant 1
5 2 Rhino 2
6 2 Rhino 2
7 2 Lion 3
8 2 Elephant 1