Pandas 替换值(分组依据和迭代)

Pandas replace values (grouping by and iteration)

早上好

我在尝试替换某些值时遇到了当前问题。我有一个数据框,其中有一列“loc10p”,将记录分成 10 个组,对于每个组,我将这些记录分成更小的组,但每个组的起始范围为 1 个子组,而不是计算最后一个子组.例如:

c2[c2.loc10p.isin([1,2])].sort_values(['loc10p','subgrupoloc10'])[['loc10p','subgrupoloc10']]

    loc10p  subgrupoloc10
1   1   1
7   1   1
15  1   1
0   1   2
14  1   2
30  1   2
31  1   2
2   2   1
8   2   1
9   2   1
16  2   1
17  2   1
18  2   2
23  2   2

我怎样才能将其转换成如下内容:

    loc10p  subgrupoloc10
1   1   1
7   1   1
15  1   1
0   1   2
14  1   2
30  1   2
31  1   2
2   2   3
8   2   3
9   2   3
16  2   3
17  2   3
18  2   4
23  2   4

我尝试做一个循环,将每个组类别分成不同的数据框,然后用前一组的计数器替换子组的值,但它没有替换任何东西:

w=1
temporal=[]
for e in range(1,11):
    temp=c2[c2['loc10p']==e]
    temporal.append(temp)
    
for e,i in zip(temporal,range(1,9)):
    try:
        e.loc[,'subgrupoloc10']=w
        w+=1
    except:
        pass
    

任何帮助将不胜感激!!

尝试:

groups = (df["subgrupoloc10"] != df["subgrupoloc10"].shift()).cumsum()
df["subgrupoloc10"] = groups
print(df)

打印:

    loc10p  subgrupoloc10
1        1              1
7        1              1
15       1              1
0        1              2
14       1              2
30       1              2
31       1              2
2        2              3
8        2              3
9        2              3
16       2              3
17       2              3
18       2              4
23       2              4

试试 ngroup

df['out'] = df.groupby(['loc10p','subgrupoloc10']).ngroup()+1
Out[204]: 
1     1
7     1
15    1
0     2
14    2
30    2
31    2
2     3
8     3
9     3
16    3
17    3
18    4
23    4
dtype: int64