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

时间:2020-09-19 18:11:28

标签: python pandas count multi-index sequential

我完成了一个数据框日志记录练习,其中包含两列multiindex:Day和Person。每天,每个人都记录自己进行了哪些锻炼(如果锻炼过)。我想添加另一列,该列按顺序计算进入此日志的条目,如下所示。因此,对于每一对独特的一天和每个人,都以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,但尚未弄清楚。

谢谢!

2 个答案:

答案 0 :(得分:3)

也许您可以尝试使用groupby后跟ngroup()

#Generating df from above
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'])

# applying reset index and ngroup
df.reset_index(inplace=True)
df['Entry Number'] = df.groupby(['Day','Person']).ngroup() +1
df

结果:

    Day Person  Exercise    Entry Number
0   1   Joe      Curls      1
1   1   Joe      Squats     1
2   1   Sandy    Sprints    2
3   1   Sandy    Bench      2
4   2   Joe      Curls      3
5   2   Sandy    Squats     4
6   3   Bob      Pushups    5

答案 1 :(得分:2)

另一种方法是按索引factorize,而不必分组:

df['EntryNumber'] = df.index.factorize()[0]+1
#df = df.reset_index() -> if you want to reset theindex

print(df)
           Exercise  EntryNumber
Day Person                      
1   Joe       Curls            1
    Joe      Squats            1
    Sandy   Sprints            2
    Sandy     Bench            2
2   Joe       Curls            3
    Sandy    Squats            4
3   Bob     Pushups            5
相关问题