2016-10-07 88 views
1

我有一個數據幀,我需要從中計算許多功能。數據幀df看起來像這樣的對象和事件:如何計算需要處理多行的熊貓數據框?

id event_id event_date age money_spent rank 
1  100  2016-10-01 4  150   2 
2  100  2016-09-30 5  10    4  
1  101  2015-12-28 3  350   3 
2  102  2015-10-25 5  400   5  
3  102  2015-10-25 7  500   2 
1  103  2014-04-15 2  1000   1 
2  103  2014-04-15 3  180   6 

從此,我需要知道每個ID和事項標識(基本上每行),有什麼是自上次事件的日期的天數,直到那一天的總花費,平均。在這個日期花費的錢,在最近的3個事件中排名等

什麼是最好的方式來處理這種問題在熊貓哪裏對於每一行我需要信息從所有行相同的id日期之前排,等等的計算?我要與相應的計算功能,返回一個新的數據幀像

id event_id event_date days_last_event avg_money_spent total_money_spent 
1  100  2016-10-01 278    500     1500 
2  100  2016-09-30 361    196.67    590  
1  101  2015-12-28 622    675     1350 
2  102  2015-10-25 558    290     580  
3  102  2015-10-25 0     500     500 
1  103  2014-04-15 0     1000     1000 
2  103  2014-04-15 0     180     180 
+2

如何'avg_money_spent'和'total_money_spent'計算?你能舉一個例子嗎? –

+0

沒關係我拿到了它 –

+0

@NickilMaveli猜想這將是一個滾動的金額和該日期之前花費的所有金額的平均值。 – sfactor

回答

0

我想出了以下解決方案:

df1= df.sort_values(by="event_date",ascending = False) 
g = df1.groupby(by=["id"]) 
df1["total_money_spent","count"]= g.agg({"money_spent":["cumsum","cumcount"]}) 
df1["avg_money_spent"]=df1["total_money_spent"]/(df1["count"]+1)