與下面的Python大熊貓據幀「DF」工作:Python的大熊貓不正確的日期計
Customer_ID | Transaction_ID | Item_ID
ABC 2017-04-12-333 X8973
ABC 2017-04-12-333 X2468
ABC 2017-05-22-658 X2906
ABC 2017-05-22-757 X8790
ABC 2017-07-13-864 X8790
BCD 2017-08-11-879 X2346
BCD 2017-08-11-879 X2468
我想算的交易有一列表示,當它的客戶端的第一次交易,第二個交易等按日期排列。 (如果同一天有兩筆交易,我將它們統計爲同一筆數字,因爲我沒有時間,所以我不知道哪一筆先到了 - 基本上把它們當作一筆交易處理)。
#get the date out of the Transaction_ID string
df['date'] = pd.to_datetime(df.Transaction_ID.str[:10])
#calculate the transaction number
df['trans_nr'] = df.groupby(['Customer_ID',"Transaction_ID", df['date'].dt.year]).cumcount()+1
不幸的是,這是我用上面的代碼輸出:
Customer_ID | Transaction_ID | Item_ID | date | trans_nr
ABC 2017-04-12-333 X8973 2017-04-12 1
ABC 2017-04-12-333 X2468 2017-04-12 2
ABC 2017-05-22-658 X2906 2017-05-22 1
ABC 2017-05-22-757 X8790 2017-05-22 1
ABC 2017-07-13-864 X8790 2017-07-13 1
BCD 2017-08-11-879 X2346 2017-08-11 1
BCD 2017-08-11-879 X2468 2017-08-11 2
這是不正確,這是正確的輸出我要找:
Customer_ID | Transaction_ID | Item_ID | date | trans_nr
ABC 2017-04-12-333 X8973 2017-04-12 1
ABC 2017-04-12-333 X2468 2017-04-12 1
ABC 2017-05-22-658 X2906 2017-05-22 2
ABC 2017-05-22-757 X8790 2017-05-22 2
ABC 2017-07-13-864 X8790 2017-07-13 3
BCD 2017-08-11-879 X2346 2017-08-11 1
BCD 2017-08-11-879 X2468 2017-08-11 1
也許邏輯應僅基於Customer_ID和日期(沒有Transaction_ID)?
我想這
df['trans_nr'] = df.groupby(['Customer_ID','date').cumcount()+1
但也算正確。
你能解釋一下trans_nr = 1爲seconrd記錄。當我運行你的代碼時,trans_nr爲第二條記錄= 2.我得到[1 2 1 1 1 1 2]不是[1 1 1 2 2 1 2] –
對不起 - 我正在試驗計數並粘貼錯誤 - 我需要得到[1 1 2 2 3 1 1],儘管 – jeangelj
爲什麼第二個記錄1?前兩個記錄有什麼不同,我只看到Item_ID? –