最大的Pandas返回超过n行

2024-09-27 04:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DataFrame,看起来像这样:

            name      value 
 date   
 2016-05-01 kelly      20  
 2016-05-05 john       12  
 2016-05-05 sarah      25  
 2016-05-05 george     3  
 2016-05-05 tom        40  
 2016-05-07 kara       24  
 2016-05-07 jane       90  
 2016-05-07 sally      39  
 2016-05-07 sam        28  

我想得到前3行(根据价值)最好每个日期。 我在期待这样的事情:

^{pr2}$

但我也同意:

            name      value 
 date   
 2016-05-05 tom        40  
 2016-05-07 jane       90  
 2016-05-07 sally      39  

我试过df.nlargest(3, 'value')但是我得到了一个奇怪的结果:

         name        value 
 date       
 2016-05-01 kelly      20  
 2016-05-01 kelly      20  
 2016-05-01 kelly      20  
 2016-05-05 tom        40  
 2016-05-05 tom        40  
 2016-05-05 tom        40  
 2016-05-05 sarah      25  
 2016-05-05 sarah      25  
 2016-05-05 sarah      25  
 2016-05-07 kara       24  
 2016-05-07 kara       24  
 ...
 2016-05-07 sally      39  
 2016-05-07 sally      39  
 2016-05-07 jane       90  
 2016-05-07 jane       90  
 2016-05-07 jane       90  

我试着一天一天地运行它:
[df.ix[day].nlargest(3, 'value') for day in df.index.unique()]

但我遇到了同样的问题(每个名字重复3次)


Tags: namedataframedfdatevaluejohnsallytom
2条回答

使用^{}结果的^{}切片

descending mode中使用^{},然后使用first ^{} results in a slice,然后使用{a6}来保留monotonically increasing。在

import pandas as pd
import cStringIO

df  = pd.read_table(cStringIO.StringIO('''
 date   name      value 
 2016-05-01 kelly      20  
 2016-05-05 john       12  
 2016-05-05 sarah      25  
 2016-05-05 george     3  
 2016-05-05 tom        40  
 2016-05-07 kara       24  
 2016-05-07 jane       90  
 2016-05-07 sally      39  
 2016-05-07 sam        28 
'''), sep=' *', index_col=0, engine='python')

print 'Original DataFrame:'
print df
print

df_top3 = df.sort_values('value', ascending=False)[:3].sort_index()
print 'Top 3 Largest value DataFrame:'
print df_top3
print

^{pr2}$

首先,这将完成任务:

df.sort_values('value', ascending=False).groupby(level=0).head(3).sort_index()

相关问题 更多 >

    热门问题