为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2023-08-22 17:56:13
我已经完成了一个数据框记录练习,有一个两列多索引:日和人。每天,每个人都会记录他们进行的锻炼(如果他们锻炼过)。我想添加另一列,它按顺序计算此日志中的条目,如下所示。因此,对于每一对独特的日期和人物,加 1。Day   Person   Exercise    EntryNumber1     Joe      Curls                 11     Joe      Squats                11     Sandy    Sprints               21     Sandy    Bench                 22     Joe      Curls                 32     Sandy    Squats                43     Bob      Pushups               5这是生成上述数据帧的代码。import 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'])我将如何创建 EntryNumber 列?我已经尝试了各种 groupby 和 cumcount 但还没有弄清楚。
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

也许您可以尝试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


查看完整回答
反对 回复 2023-08-22
?
白衣非少年

TA贡献1155条经验 获得超0个赞

另一种方法是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


查看完整回答
反对 回复 2023-08-22
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信