2016-07-27 73 views
2

我有以下格式大大熊貓據幀:應用迭代函數的每一個組中的熊貓數據幀

 prod_id  timestamp  text 
150523 0006641040 9.393408e+08 text_1 
150500 0006641040 9.408096e+08 text_2 
150499 0006641041 1.009325e+09 text_3 
150508 0006641041 1.018397e+09 text_4 
150524 0006641042 1.025482e+09 text_5 

數據幀由PROD_ID和時間戳進行排序。我試圖做的是基於從最早到最新的時間戳枚舉每個prod_id的計數器。例如,我想實現這樣的事情:

 prod_id  timestamp  text enum 
150523 0006641040 9.393408e+08 text_1 1 
150500 0006641040 9.408096e+08 text_2 2 
150499 0006641041 1.009325e+09 text_3 1 
150508 0006641041 1.018397e+09 text_4 2 
150524 0006641042 1.025482e+09 text_5 1 

我可以通過每個行會,增加櫃檯做迭代很容易,但有沒有辦法更函數式編程的方式來做到這一點?

感謝

回答

3

UPDATE:

In [324]: df 
Out[324]: 
     prod_id  timestamp text 
150523 6641040 9.393408e+08 text_1 
150500 6641040 9.408096e+08 text_2 
150501 6641040 9.408096e+08 text_3 
150499 6641041 1.009325e+09 text_3 
150508 6641041 1.018397e+09 text_4 
150524 6641042 1.025482e+09 text_5 

In [325]: df['enum'] = df.groupby(['prod_id'])['timestamp'].cumcount() + 1 

In [326]: df 
Out[326]: 
     prod_id  timestamp text enum 
150523 6641040 9.393408e+08 text_1  1 
150500 6641040 9.408096e+08 text_2  2 
150501 6641040 9.408096e+08 text_3  3 
150499 6641041 1.009325e+09 text_3  1 
150508 6641041 1.018397e+09 text_4  2 
150524 6641042 1.025482e+09 text_5  1 

OLD答案:

In [314]: df['enum'] = df.groupby(['prod_id'])['timestamp'].rank().astype(int) 

In [315]: df 
Out[315]: 
     prod_id  timestamp text enum 
150523 6641040 9.393408e+08 text_1  1 
150500 6641040 9.408096e+08 text_2  2 
150499 6641041 1.009325e+09 text_3  1 
150508 6641041 1.018397e+09 text_4  2 
150524 6641042 1.025482e+09 text_5  1 
+0

那太好了,謝謝!不知道rank()是否存在。只是一個快速跟進,雖然 - 我嘗試了一部分真實數據,它有一些重複,即當我的時間戳是相同的。在這種情況下是否有一種簡單的方法可以避免相同的數字? – ymoiseev

+0

@Bruhnswik,不客氣!請檢查更新的答案 - 它應該採取重複值的照顧... – MaxU

+0

工作就像一個魅力,非常感謝! – ymoiseev