我对北极是新手,需要专家的建议.我有一些工作代码,但我必须相信有一个更快和/或更优雅的方法来做到这一点.我有一个大的框架,其中有cik(int)、form(string)和period(date)等列.Form的值可以是"10—Q"或"10—K".每个cik将有许多行的2个表单类型,表示不同的周期. 最后我想说的是,对于每个cik组,只剩下最近的10—Q,只剩下最近的10—K.当然,如果10—K表格少于10张,所有表格都应该保留. 以下是我现在正在做的(它工作):
def filter_sub_for_11_rows_per_cik(df_):
df = df_.sort('cik')
# Keep only the last 10-Q
q_filtered_df = df.group_by('cik').map_groups(
lambda g:
g.sort('period', descending=True).filter(pl.col('form').eq('10-Q')).head(1))
# Keep the last up to 10 10-Ks
k_filtered_df = df.group_by('cik').map_groups(
lambda g:
g.sort('period', descending=True)
.filter(pl.col('form').eq('10-K'))
.slice(0, min(10, g.filter(pl.col('form').eq('10-K')).shape[0]))
)
return pl.concat([q_filtered_df, k_filtered_df])