“Python排序”;名称“;在pd.DataFrame中,按活动的上一年列出
大家好,我的社区 我有一个超过300个条目的df。df显示了不同作者/研究人员在一个特定研究项目中积极提交出版物的年份。 数据如下所示:“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
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