2017-09-26 41 views
0

我有一個熊貓數據幀像這樣的gouping的熊貓數據幀創建新列:如何基於字符串列

df = pd.DataFrame({'a':['A','A','A','B','B'], 
        'b':['Alabama','Alabama','Antioch','Brisbane','Boolean']}) 

我要添加兩個新列說,「N1」和「N2」等等屬於第一組'a'列的所有行將具有值1,並且下一組將在新列'n1'中具有值2。相同的邏輯列「b」和「N 2」,但嵌套的「A」

所得數據幀分組內應該是這樣的(由於某種原因,降價表不因此工作中的鏈接):

enter image description here

我該怎麼做?

回答

0

您可以使用pandas.factorize將輸入值編碼爲枚舉類型或分類變量;要通過a得到n2列,只是組和因式分解b

import pandas as pd 

df['n1'] = pd.factorize(df.a)[0] + 1 
df['n2'] = df.groupby('a').b.transform(lambda x: pd.factorize(x)[0] + 1) 

df 
# a   b n1 n2 
#0 A Alabama 1 1 
#1 A Alabama 1 1 
#2 A Antioch 1 2 
#3 B Brisbane 2 1 
#4 B Boolean 2 2 
+0

謝謝主席先生!你是怎麼得到的: n2 = 1爲布里斯班和2爲布爾? 我得到n2 = 2的布里斯班和1布爾 –

+1

我再次嘗試,它的工作完全是因爲你的結果顯示 –

+0

在另一個嘗試我得到n2 = 2布里斯班和1布爾再次。 –

0

或者使用astypecategory

df['n1'] = df.a.astype('category').cat.codes.add(1) 
df['n2'] = df.groupby('a').b.transform(lambda x: x.astype('category').cat.codes.add(1)) 

df 
Out[1254]: 
    a   b n1 n2 
0 A Alabama 1 1 
1 A Alabama 1 1 
2 A Antioch 1 2 
3 B Brisbane 2 2 
4 B Boolean 2 1 
+0

之前每次都做了 delf的謝謝文。我也喜歡你的回答。但我只能接受一個答案。 –

+0

@ShirishRanade不用擔心美好的一天〜:) – Wen