微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我完成了一个数据框日志记录练习,其中包含两列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,2,3],'Person':['Joe','Joe','Sandy','Bob'],'Exercise':['Curls','Squats','Sprints','Bench','Curls','Pushups']})
df = df.set_index(['Day','Person'])

我将如何创建EntryNumber列?我已经尝试了所有形式的groupby和cumcount,但尚未弄清楚。

谢谢!

解决方法

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

#Generating df from above
import pandas as pd
df = pd.DataFrame({'Day':[1,1,2,3],'Person':['Joe','Joe','Sandy','Bob'],'Exercise':['Curls','Squats','Sprints','Bench','Curls','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
,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。