我有一个pandas数据帧:
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_foo
和cc_foo
,我只需要最新的记录,因为我的数据可以有多行用于相同的`id
感谢任何帮助
答案 0 :(得分:1)
这非常接近您的需求。您需要在除df.groupby
之外的所有内容上调用date
,然后在date
中获取dfGroupBy.agg
的最新值,然后执行取消堆栈操作。
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
列。