嘿,我正在尝试对Value
分组的User
列进行累加计数,但是只有在两者之间有不同的值时才增加计数。
有人可以帮我吗?我真的很感激!因为我有点卡住。.
我能达到的最好成绩是使用以下设备进行正常的计数:
df['Cumcount'] = df.groupby(['User', 'Value'].cumcount()+1
User Value Cumcount
0 A X 1
1 A X 2
2 A Y 1
3 A X 3
4 A Z 1
5 A Y 2
6 B X 1
7 B Y 1
8 B X 2
9 B X 3
但是我想要的输出是:
User Value Cumcount
0 A X 1
1 A X 1
2 A Y 1
3 A X 2
4 A Z 1
5 A Y 2
6 B X 1
7 B Y 1
8 B X 2
9 B X 2
答案 0 :(得分:0)
您可以设置两个条件来创建一个返回True
和False
的序列并将其设置为s
。
.duplicated()
的第一个条件表示任何行是否重复。.groupby('User')
并使用.cumcount()
并与您的版本进行比较,但版本相同,但分别为User
和Value
。本质上,如果前者大于后者,则意味着两者之间存在价值。 1和2的组合返回boolean
系列s,如果将其作为列包含在数据框中,则看起来像这样:
df['s'] = ((df.duplicated(subset=(['User', 'Value'])))
& (df.groupby('User').cumcount() + 1 > df['Cumcount']))
User Value Cumcount s
0 A X 1 False
1 A X 2 False
2 A Y 1 False
3 A X 3 True
4 A Z 1 False
5 A Y 2 True
6 B X 1 False
7 B Y 1 False
8 B X 2 True
9 B X 3 True
您可以在此处创建.groupby().cumcount() + 1
的嵌套User
和上面创建的系列s
。完整代码:
s = ((df.duplicated(subset=(['User', 'Value'])))
& (df.groupby('User').cumcount() + 1 > df['Cumcount']))
df['Cumcount'] = df.groupby(['User', df.groupby(['User', s]).cumcount() + 1]).cumcount() + 1
df
Out[1]:
User Value Cumcount
0 A X 1
1 A X 1
2 A Y 1
3 A X 2
4 A Z 1
5 A Y 2
6 B X 1
7 B Y 1
8 B X 2
9 B X 2