2016-11-21 60 views
1

说我有这样一个数据帧:熊猫:在另一列分配基于字符串值类别列

 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,其中分配1A值开始,所有行其中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),具有空间。我不能改变它。我是否必须对列标题进行某种操作?

回答

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

+0

一件事。在我的实际案例中,列“A”被称为“第一(C)”。玩你的代码片段时,调用'A.str [:2]'部件时会出现问题。我把'A.str'指的是'A'列,但是如果它的名字与我的情况不一样呢? – FaCoffee

+1

你可以像df.sort_values('First(C)')['First(C)']那样将它们放在括号中。str [:2]' – Psidom