说我有一个像这样的数据框:

     A         B
1    05010001  17
2    05020001  5
3    05020002  11
4    05020003  2
5    05030001  86
6    07030001  84
7    07030002  10
8    08010001  16


我想添加第三列C,将1分配给所有以A开头的行,将05分配给以2开头的所有行,依此类推。

结果将是:

     A         B    C
1    05010001  17   1
2    05020001  5    1
3    05020002  11   1
4    05020003  2    1
5    05030001  86   1
6    07030001  84   2
7    07030002  10   2
8    08010001  16   3


最有效的方法是什么?我的实际数据框有3,000,000行。

编辑

我实际数据框中的列07称为A,带有空格。我不允许更改它。我是否必须对列标题进行某种操作?

最佳答案

firstTwo = df.sort_values('A').A.str[:2]            # sort the data frame by column A and
                                                    # take the first two digits of column A
df['C'] = (firstTwo != firstTwo.shift()).cumsum()   # create ids based on the first two
                                                    # digits with cumsum
df


python -  Pandas :根据另一列中的字符串值分配分类列-LMLPHP

10-05 17:47