You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按分组获取每组前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)

逻辑说明:

  1. groupby('x')按指定字段分组,group_keys=False避免分组键被加入结果索引
  2. 对每组先按Year升序排序,确保时间早的条目在前
  3. 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)

逻辑说明:

  1. group_by(x)完成分组,arrange(Year)按时间升序排列每组数据
  2. floor(n() * 0.5)计算每组需保留的条目数(向下取整,适配示例逻辑),slice_head()提取对应行
  3. ungroup()取消分组状态,还原普通数据框格式

两种方案运行后均可得到符合预期的输出结果。

内容的提问来源于stack exchange,提问作者user26423877

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:41:04