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

时间:2016-11-21 19:56:47

标签: python pandas categories

说我有这样的数据框:

     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为所有值的所有行以07开头,等等。

结果将是:

     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行。

修改

我的实际数据框中的A列名为First (C),带有空格。我不被允许改变它。我是否必须对列的标题进行某种操作?

1 个答案:

答案 0 :(得分:3)

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

enter image description here