首页 > 解决方案 > 列中间的增量编号

问题描述

我有这样的数据框

0             
1             
2       Q1 A 1
3       Q1 A 2
4       Q1 A 3
5       Q1 A 4
6       Q1 A 5
7             
8       Q2 A 1
9       Q2 A 2
10      Q2 A 3
11      Q2 A 4
12      Q2 A 5
13      Q2 A 6
14      Q2 A 7
15      Q2 A 9
16            
17       Q3 V 
18       Q3 V 
19       Q3 V 
20       Q3 V 
21       Q3 V 
22            
23      Q4 A 1
24      Q4 A 2
25      Q4 A 3
26      Q4 A 4
27      Q4 A 5
28      Q4 A 6
29      Q4 A 7
30            
31      Q5 A 1
32      Q5 A 2
33      Q5 A 3
34      Q5 A 4
35      Q5 A 5
36      Q5 A 6
37            
38          Q6
39            
40            
41            
42          Q7
43            
44            
45            
46          Q8
47            
48       Q9 V 
49       Q9 V 
50       Q9 V 
51       Q9 V 
52            
53     Q10 A 1
54     Q10 A 2
55     Q10 A 3
56     Q10 A 4
57     Q10 A 5
58     Q10 A 6
59     Q10 A 7
60     Q10 A 8
61     Q10 A 9
62    Q10 A 10
63            
64      Q11 V 
65      Q11 V 
66      Q11 V 
67      Q11 V 
68      Q11 V 
69      Q11 V 
70            
71     Q12 A 1
72     Q12 A 2
73     Q12 A 3
74     Q12 A 4
75     Q12 A 5
76     Q12 A 6
77     Q12 A 7

我想要的是需要添加编号,例如Q1 A1Q1 A 2Q3 V 1等等,Q3 V 2所以如果字符串或单元格值包含,我想要的是按升序添加数值V

如果问题发生变化,我正在努力让逻辑停止编号并根据条件重新开始

我的预期输出如下

0             
1             
2       Q1 A 1
3       Q1 A 2
4       Q1 A 3
5       Q1 A 4
6       Q1 A 5
7             
8       Q2 A 1
9       Q2 A 2
10      Q2 A 3
11      Q2 A 4
12      Q2 A 5
13      Q2 A 6
14      Q2 A 7
15      Q2 A 9
16            
17       Q3 V 1
18       Q3 V 2
19       Q3 V 3
20       Q3 V 4
21       Q3 V 5
22            
23      Q4 A 1
24      Q4 A 2
25      Q4 A 3
26      Q4 A 4
27      Q4 A 5
28      Q4 A 6
29      Q4 A 7
30            
31      Q5 A 1
32      Q5 A 2
33      Q5 A 3
34      Q5 A 4
35      Q5 A 5
36      Q5 A 6
37            
38          Q6
39            
40            
41            
42          Q7
43            
44            
45            
46          Q8
47            
48       Q9 V 1
49       Q9 V 2
50       Q9 V 3
51       Q9 V 4
52            
53     Q10 A 1
54     Q10 A 2
55     Q10 A 3
56     Q10 A 4
57     Q10 A 5
58     Q10 A 6
59     Q10 A 7
60     Q10 A 8
61     Q10 A 9
62    Q10 A 10
63            
64      Q11 V 1
65      Q11 V 2
66      Q11 V 3
67      Q11 V 4
68      Q11 V 5
69      Q11 V 6
70            
71     Q12 A 1
72     Q12 A 2
73     Q12 A 3
74     Q12 A 4
75     Q12 A 5
76     Q12 A 6
77     Q12 A 7

我怎么能在熊猫中做到这一点

标签: python-3.xpandas

解决方案


首先使用三列转换单列

   df.dropna(inplace=True)      
   df = df.column.str.split(expand=True)

现在您的数据框将有 3 列 - 假设 Col_A、Col_B 和 Col_C,值将分别为 Q#、X、#。您可能需要更改以下代码中列的名称/索引。

    df[2][0] = 1
    for i in range(1,len(Col_A)+1):
        if df[2][i].null():
            if df[0][i].notnull() & df[1][i].notnull():
                if (df[0][i] == df[0][i-1]) & (df[1][i] == df[1][i-1]):
                       df[2][i]= df[2][i-1] + 1
                else:
                    df[2][i]=1

推荐阅读