基于另一个计数的列

时间:2021-03-18 20:17:28

标签: python pandas

我有一个这样的数据框。

0     1.0
1    None
2     3.0
3    None
Name: B, dtype: object

我想创建一个带有如下计数器的新列。

 df = pd.DataFrame({'transaction_id':[12565,12565,12743,12743,13456,13456,13856],
                'rep_id':[560,560,560,560,287,287,287]})

2 个答案:

答案 0 :(得分:8)

试试 transform + factorize

df['new']=df.groupby('rep_id').transaction_id.transform(lambda x : pd.factorize(x)[0]+1)
df
Out[389]: 
   transaction_id  rep_id  new
0           12565     560    1
1           12565     560    1
2           12743     560    2
3           12743     560    2
4           13456     287    1
5           13456     287    1
6           13856     287    2

答案 1 :(得分:2)

根据您的数据(如果 transaction_id 不同,则 rep_id 不同)我们还可以:

df['new'] = (df['transaction_id'].ne(df['transaction_id'].shift())
    .groupby(df['rep_id']).cumsum()
)

更新:您也可以使用 rank,尽管它的行为略有不同:

df.groupby('rep_id')['transaction_id'].rank('dense').astype(int)

输出:

   transaction_id  rep_id  new
0           12565     560    1
1           12565     560    1
2           12743     560    2
3           12743     560    2
4           13456     287    1
5           13456     287    1
6           13856     287    2