Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“Python排序”;名称“;在pd.DataFrame中,按活动的上一年列出_Python_Pandas_Filter - Fatal编程技术网

“Python排序”;名称“;在pd.DataFrame中,按活动的上一年列出

“Python排序”;名称“;在pd.DataFrame中,按活动的上一年列出,python,pandas,filter,Python,Pandas,Filter,大家好,我的社区 我有一个超过300个条目的df。df显示了不同作者/研究人员在一个特定研究项目中积极提交出版物的年份。 数据如下所示: Author Name of Publication Year Name A Pub A 1998 Name B Pub B 2005 Name C Pub A 1998 Name A Pub C

大家好,我的社区

我有一个超过300个条目的df。df显示了不同作者/研究人员在一个特定研究项目中积极提交出版物的年份。 数据如下所示:

Author     Name of Publication     Year
Name A   Pub A                   1998
Name B   Pub B                   2005
Name C   Pub A                   1998
Name A   Pub C                   2000
etc...
由于作者在项目中处于活动状态时发表了多份出版物,因此df包含多个条目及其名称。 我现在想过滤作者最早的活动年份以及他/她最后一年的活动。目标是导出每个作者的活动时间跨度

但目前我真的不知道如何应用一个合适的过滤器。 为了推导每个作者的最大值,我用来过滤df的代码是:

     df.groupby('author')['year'].aggregate(pd.Series.idxmax)
之后,我将应用同一行来过滤最小值。 不幸的是,输出显示“此数据类型不允许还原操作'argmax'

有人能告诉我我监督了什么/如何编写一个过滤器来真正完成它的工作吗


提前感谢。

您可以按日期对数据帧进行排序,然后使用
agg
first
last
提取最早和最近几年的活动:

df.sort_values('Year').groupby('Author')['Year'].agg(['first', 'last'])

        first  last
Author             
Name A   1998  2000
Name B   2005  2005
Name C   1998  1998
然后,如果需要,可以使用
join
将这些结果放回原始数据帧:

new_df = (df.set_index('Author')
          .join(df.sort_values('Year')
                .groupby('Author')
                .agg({'Year':['first', 'last']})))

>>> new_df
       Name of Publication  Year  (Year, first)  (Year, last)
Author                                                       
Name A               Pub A  1998           1998          2000
Name A               Pub C  2000           1998          2000
Name B               Pub B  2005           2005          2005
Name C               Pub A  1998           1998          1998