2016-11-21 42 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

相關問題