首页 > 解决方案 > 熊猫替换值(分组和迭代)

问题描述

早上好

尝试替换某些值时,我遇到了当前问题。我有一个数据框,其中有一列“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
    

任何帮助将不胜感激!

标签: pythonpandasreplaceiterationpandas-groupby

解决方案


尝试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

推荐阅读