如何按分组获取每组前50%的时间序列条目?
按分组提取前50%时间条目实现方案
针对按字段x分组后,提取每组中Year字段在前50%(时间更早的一半)条目的需求,以下是两种主流数据分析工具的实现方案:
Python(Pandas)实现
import pandas as pd # 示例数据集 data = pd.DataFrame({ 'x': ['a', 'a', 'b', 'b', 'b', 'b', 'c', 'c'], 'Year': [2000, 2001, 2002, 2003, 2004, 2005, 2010, 2020] }) # 分组处理逻辑:按x分组→每组按Year升序排序→取前50%行 result = data.groupby('x', group_keys=False).apply( lambda group: group.sort_values('Year').head(int(len(group)*0.5)) ) print(result)
逻辑说明:
groupby('x')按指定字段分组,group_keys=False避免分组键被加入结果索引- 对每组先按
Year升序排序,确保时间早的条目在前 int(len(group)*0.5)计算每组需保留的条目数,通过head()提取对应行数
R(dplyr)实现
library(dplyr) # 示例数据集 data <- tibble( x = c('a', 'a', 'b', 'b', 'b', 'b', 'c', 'c'), Year = c(2000, 2001, 2002, 2003, 2004, 2005, 2010, 2020) ) # 分组处理逻辑:分组→按Year排序→提取前50%行 result <- data %>% group_by(x) %>% arrange(Year) %>% slice_head(n = floor(n() * 0.5)) %>% ungroup() print(result)
逻辑说明:
group_by(x)完成分组,arrange(Year)按时间升序排列每组数据floor(n() * 0.5)计算每组需保留的条目数(向下取整,适配示例逻辑),slice_head()提取对应行ungroup()取消分组状态,还原普通数据框格式
两种方案运行后均可得到符合预期的输出结果。
内容的提问来源于stack exchange,提问作者user26423877
相关产品推荐
相关产品推荐

