如何按变量从pandas DataFrame中删除各分组的首年数据
实现方案
前置准备
先将存储日期的Date列从字符串转为pandas datetime格式,否则无法提取年份维度信息:
import pandas as pd df['Date'] = pd.to_datetime(df['Date'])
方案1:矢量化实现(适合百万级行的股票全量数据,运行效率更高)
- 按股票代码
Symbol分组,通过transform广播计算每只股票分组内的最早交易年份 - 通过布尔索引筛选,仅保留日期年份大于对应股票首年的记录
# 匹配每一行所属股票的首年值 first_year_per_symbol = df.groupby('Symbol')['Date'].dt.year.transform('min') # 过滤掉所有属于首年的行 df_cleaned = df[df['Date'].dt.year > first_year_per_symbol].copy()
方案2:分组过滤实现(逻辑直观易读,适合中小数据量场景)
直接对每个股票分组应用过滤规则,删除首年对应的所有记录:
df_cleaned = df.groupby('Symbol', group_keys=False).filter( lambda group: group['Date'].dt.year > group['Date'].dt.year.min() )
补充说明:当前示例中
Price列为带$符号的字符串格式,本次删除首年数据的需求不涉及价格字段的格式处理,若后续需要做价格计算,可单独将该列转为数值型。
内容的提问来源于stack exchange,提问作者brise95
相关产品推荐
相关产品推荐

