以下是摘录:
test = pd.DataFrame({'uid':[1,1,2,2,3,3],
'start_time':[datetime(2017,7,20),datetime(2017,6,20),datetime(2017,5,20),datetime(2017,4,20),datetime(2017,3,20),datetime(2017,2,20)],
'amount': [10,11,12,13,14,15]})
输出:
amount start_time uid
0 10 2017-07-20 1
1 11 2017-06-20 1
2 12 2017-05-20 2
3 13 2017-04-20 2
4 14 2017-03-20 3
5 15 2017-02-20 3
期望的输出:
amount start_time uid
0 10 2017-07-20 1
2 12 2017-05-20 2
4 14 2017-03-20 3
我希望按 我尝试 更新:感谢@jezrael& @EdChum,你们总是在这个论坛上帮助我,非常感谢你! 我在1136行和30列的数据集上测试了两个解决方案的执行时间: 我猜uid
进行分组,并注意具有最新start_time的行。基本上,我想通过仅选择具有最新start_time
的test.groupby(['uid'])['start_time'].max()
但它不起作用,因为它只返回uid
和start_time
列。我也需要amount
列。Method A: test.sort_values('start_time', ascending=False).drop_duplicates('uid')
Total execution time: 3.21 ms
Method B: test.loc[test.groupby('uid')['start_time'].idxmax()]
Total execution time: 65.1 ms
groupby
需要更多时间来计算。
答案 0 :(得分:1)
使用idxmax
返回最新时间的索引并使用它来索引原始df:
In[35]:
test.loc[test.groupby('uid')['start_time'].idxmax()]
Out[35]:
amount start_time uid
0 10 2017-07-20 1
2 12 2017-05-20 2
4 14 2017-03-20 3
答案 1 :(得分:0)
start_time
列uid
df = test.sort_values('start_time', ascending=False).drop_duplicates('uid')
print (df)
amount start_time uid
0 10 2017-07-20 1
2 12 2017-05-20 2
4 14 2017-03-20 3
uid
使用sort_values
:
print (test.sort_values('start_time', ascending=False)
.drop_duplicates('uid')
.sort_values('uid'))
如果需要按顺序c:url
输出:
JSTL