根据其他列在大型数据框中创建列

时间:2014-04-22 17:36:16

标签: python pandas

我有一个拥有超过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的值是先前的值加一。

我的问题是我想知道一个基于最近使用pandas解释的条件创建新列的代码。有什么想法吗?

1 个答案:

答案 0 :(得分: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的索引更加pythonic。