Python 熊猫在groupby之后获得累计总和

Python 熊猫在groupby之后获得累计总和,python,pandas,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

我有这样一个数据框架:基本上每一行都是由一个客户在一天内完成的交易。 同一客户在同一天和不同日期有多笔交易。我想得到一个列,列出以前访问过的客户数量

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) 
但它给出了每笔交易的累计金额。 如何每天获得相同的值,但在第二天迭代

IIUC,您需要:

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


另一种分类方法是:

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

输入df看起来有误,最后一行的第二个日期应该是date2?id3应该是id2?是我的错。但是你已经给出了答案,谢谢!这个
df['visit']=pd.category(df.date).code在您的方法中是否足够?不,需要在客户级别设置类别。如果客户从未在date1访问过商店,而只是在date2访问过商店,date2需要是0,您能给我一个等效的sql查询来理解它吗better@SaleemAhmed我不是sql方面的专家,但是如果您看看
pd.factorize()
docs,它会有所帮助。基本上,其思想是,用一个整数值标识每个唯一的事件(因为python以0开头,所以它有助于您的用例):)
df['visit'] = df.groupby('id')['date'].transform(lambda x: pd.Categorical(x).codes)