Sas*_*cha 4 python group-by conditional-statements dataframe pandas
我有如下所示的熊猫数据框:
account have
A 0
A 1
A 2
A 1
A 1
A 2
A 0
A 1
A 1
B 0
B 0
B 0
B 0
B 0
B 1
B 1
B 1
B 1
Run Code Online (Sandbox Code Playgroud)
我想要这样的结果:
account have
A 12
A 12
A 0
A 1
A 2
A 0
A 1
A 2
A 3
B 12
B 12
B 12
B 12
B 12
B 12
B 12
B 12
B 12
Run Code Online (Sandbox Code Playgroud)
我想在找到并更改的特定值之后进行排序,account否则,它将返回12. 例如,具体值为2,如果有任何大于或等于的值2将被考虑。在 account 中A,它2在索引 2 处找到,该索引将更改为,0之后的任何值2都将从 开始排名1。
在帐户中B,没有大于或等于的值2,结果返回12。
事实上,我有一百万的帐户,如果有任何建议或起点,请帮助我。
使用cumsum找到您的组,cumcount以填补他们进来。
m = df["have"].ge(2).groupby(df["account"]).cumsum()
df.groupby([df["account"], m]).cumcount().where(m.ne(0), 12)
0 12
1 12
2 0
3 1
4 2
5 0
6 1
7 2
8 3
9 12
10 12
11 12
12 12
13 12
14 12
15 12
16 12
17 12
dtype: int64
Run Code Online (Sandbox Code Playgroud)