熊猫在groupby之后获得累计和

时间:2019-04-13 12:52:44

标签: python pandas

我有这个数据框:基本上每一行都是一天由一位客户执行的交易。 同一位客户在同一天和不同日期进行了多次交易。我想获得一列以前访问的客户数。

id  date   purchase 

id1 date1  $10    

id1 date1  $50    

id1 date2  $30     

id2 date1  $10     

id2 date1  $10     

id3 date3  $10     

添加访问次数列后:

id  date   purchase  visit

id1 date1  $10         0 

id1 date1  $50         0

id1 date2  $30         1

id2 date1  $10         0

id2 date2  $10         1

id2 date3  $10         2 

我尝试做

df.visits = 1 
df.visits = df.groupby([id, date], as_index=False)[visits].transform(cumsum) 

,但它给出了每笔交易的累计金额。 如何每天获得相同的价值,但第二天进行迭代。

2 个答案:

答案 0 :(得分:1)

IIUC,您需要:

df['visit']=df.groupby('id')['date'].transform(lambda x: pd.factorize(x)[0])
print(df)

    id   date purchase  visit
0  id1  date1      $10      0
1  id1  date1      $50      0
2  id1  date2      $30      1
3  id2  date1      $10      0
4  id2  date2      $10      1
5  id2  date3      $10      2

答案 1 :(得分:0)

另一种分类方法:

df['visit'] = df.groupby('id')['date'].transform(lambda x: pd.Categorical(x).codes)