2017-08-25 56 views
-1

我有一個數據幀熊貓這樣:重塑數據框只保留最近的日期

id date   cc 
aa1 01/01/2016 foo 
aa1 01/05/2016 foo 
aa1 01/09/2016 bar 
aa1 01/05/2017 baz 
aa2 04/03/2016 foo 
aa2 09/04/2017 bar 
aa3 02/02/2017 foo 

我試圖創建一個數據幀這樣:

id date_foo  cc_foo  date_bar  cc_bar date_baz  cc_baz 
aa1 01/05/2016 foo  01/09/2016 bar  01/05/2017 baz 
aa2 04/03/2016 foo  09/04/2017 bar  null   null 
aa3 02/02/2017 foo  null   null  null   null 

我的問題是: - 對於bb_foocc_foo我只需要最近的記錄,因爲我的數據可以有多個相同的行'id

欣賞任何幫助

+0

創建第二個數據框背後的邏輯是什麼? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ想法是爲每個'id'獲得一個唯一的記錄,其中一行包含所有需要的數據。有'df.cc.unique()'= ['foo','bar','baz'] – Kvothe

+0

我沒有在您的示例數據中看到任何bb_foo或cc_foo。它是什麼? – Yeile

回答

1

這非常接近您的需要。除date之外,您需要撥打df.groupby,然後在dfGroupBy.agg中獲取date的最新值,然後執行拆分操作。

In [1114]: df.groupby(['id', 'cc']).agg({'date' : lambda x: x.sort_values().drop_duplicates().values[-1] }).unstack() 
Out[1114]: 
      date       
cc   bar   baz   foo 
id          
aa1 01/09/2016 01/05/2017 01/05/2016 
aa2 09/04/2017  None 04/03/2016 
aa3  None  None 02/02/2017 

而不是單獨cc_xxx列,你在MultiIndex的所有信息。

+0

謝謝!這工作太:) – Kvothe