问题描述
我完成了一个数据框日志记录练习,其中包含两列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