我有一个拥有超过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解释的条件创建新列的代码。有什么想法吗?
答案 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。