Python Pandas 按顺序计算多索引中唯一对的出现次数

我已经完成了一个数据框记录练习,有一个两列多索引:日和人。每天,每个人都会记录他们进行的锻炼(如果他们锻炼过)。我想添加另一列,它按顺序计算此日志中的条目,如下所示。因此,对于每一对独特的日期和人物,加 1。


Day   Person   Exercise    EntryNumber

1     Joe      Curls                 1

1     Joe      Squats                1

1     Sandy    Sprints               2

1     Sandy    Bench                 2

2     Joe      Curls                 3

2     Sandy    Squats                4

3     Bob      Pushups               5

这是生成上述数据帧的代码。


import pandas as pd

df = pd.DataFrame({'Day':[1,1,1,1,2,2,3], 

                   'Person':['Joe','Joe','Sandy','Sandy','Joe','Sandy','Bob'], 

                   'Exercise':['Curls','Squats','Sprints','Bench','Curls','Squats','Pushups']})

df = df.set_index(['Day','Person'])

我将如何创建 EntryNumber 列?我已经尝试了各种 groupby 和 cumcount 但还没有弄清楚。


红糖糍粑
浏览 174回答 2
2回答

MMTTMM

也许您可以尝试groupby以下操作ngroup():#Generating df from aboveimport pandas as pddf = pd.DataFrame({'Day':[1,1,1,1,2,2,3],                    'Person':['Joe','Joe','Sandy','Sandy','Joe','Sandy','Bob'],                    'Exercise':['Curls','Squats','Sprints','Bench','Curls','Squats','Pushups']})df = df.set_index(['Day','Person'])# applying reset index and ngroupdf.reset_index(inplace=True)df['Entry Number'] = df.groupby(['Day','Person']).ngroup() +1df结果:    Day Person  Exercise    Entry Number0   1   Joe      Curls      11   1   Joe      Squats     12   1   Sandy    Sprints    23   1   Sandy    Bench      24   2   Joe      Curls      35   2   Sandy    Squats     46   3   Bob      Pushups    5

白衣非少年

另一种方法是factorize通过索引而无需分组:df['EntryNumber'] = df.index.factorize()[0]+1#df = df.reset_index() -> if you want to reset theindexprint(df)           Exercise  EntryNumberDay Person                      1   Joe       Curls            1    Joe      Squats            1    Sandy   Sprints            2    Sandy     Bench            22   Joe       Curls            3    Sandy    Squats            43   Bob     Pushups            5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python