2014-04-22 238 views
0

我有一個擁有6萬多公司名稱的熊貓數據框。我有這個數據框的簡化。基於另一列在大數據框中創建列

print dm 


     COMPANY ID CUSIP 
    0  AB 0  33 
    1  CD 0  33 
    2  LM 0  33 
    3  NT 1  34 
    4  ET 1  34 
    5  RY 1  35 
    6  EU 3  36 
    7  EY 3  37 

我想基於ID的價值和CUSIP

COMPANY ID CUSIP NEW ID 
0  AB 0  33   1 
1  CD 0  33   1 
2  LM 0  33   1 
3  NT 1  34   2 
4  ET 1  34   2 
5  RY 1  35   3 
6  EU 3  36   4 
7  EY 3  37   5 

正如你所看到的,對於ID的eache值來創建一個新的列,如果CUSIP的價值是不同的價值的新ID是先前的值加1.另外,對於CUSIP的每次更改,ID的值是先前的值加1。

我的問題是我想知道一個代碼,根據最近使用熊貓解釋的條件創建新列。有任何想法嗎?

+0

你能否清楚地說出你的問題? –

+0

我的問題是我想知道創建新列的代碼。 – CreamStat

+0

[此問題可能重複](https://stackoverflow.com/questions/12555323/adding-new-column-to-existing-dataframe-in-python-pandas)。總結'df ['new_column'] = new_column' –

回答

2

使用factorize

In [30]: pd.factorize(df.CUSIP) 
Out[30]: (array([0, 0, 0, 1, 1, 2, 3, 4]), array([33, 34, 35, 36, 37])) 

In [31]: values, labels = pd.factorize(df.CUSIP) 

In [32]: df['NEW_ID'] = values 

In [33]: df 
Out[33]: 
    COMPANY ID CUSIP NEW_ID 
0  AB 0  33  0 
1  CD 0  33  0 
2  LM 0  33  0 
3  NT 1  34  1 
4  ET 1  34  1 
5  RY 1  35  2 
6  EU 3  36  3 
7  EY 3  37  4 

[8 rows x 4 columns] 

加1值,以獲得您想要的輸出,但基於0的索引是更Python。

+0

或者我想你可以做'df ['NEW_ID'] = df.CUSIP - 32' ... – TomAugspurger

相關問題