如何在Pandas中按日期分类删除指定字符串范围的行?
问题描述
现有如下DataFrame:
import pandas as pd data = { 'Date': ['2022-01-01']*6 + ['2022-01-02']*6, 'Info': ['egg price', 'Central Java', 'East Java', 'chicken price', 'Central Java', 'East Java', 'egg price', 'Central Java', 'East Java', 'chicken price', 'Central Java', 'East Java'] } df = pd.DataFrame(data)
原始数据展示:
Date Info 0 2022-01-01 egg price 1 2022-01-01 Central Java 2 2022-01-01 East Java 3 2022-01-01 chicken price 4 2022-01-01 Central Java 5 2022-01-01 East Java 6 2022-01-02 egg price 7 2022-01-02 Central Java 8 2022-01-02 East Java 9 2022-01-02 chicken price 10 2022-01-02 Central Java 11 2022-01-02 East Java
需求:按日期分组,删除每个日期组内从“egg price”所在行到“chicken price”前一行的所有行,仅保留每个日期组内“chicken price”及之后的行。
期望结果:
Date Info 3 2022-01-01 chicken price 4 2022-01-01 Central Java 5 2022-01-01 East Java 9 2022-01-02 chicken price 10 2022-01-02 Central Java 11 2022-01-02 East Java
解决方案
通过分组后标记保留行的方式实现:
def filter_group(group): # 定位组内"chicken price"的行索引 chicken_row_idx = group[group['Info'] == 'chicken price'].index[0] # 返回从该行开始到组末尾的所有数据 return group.loc[chicken_row_idx:] # 按日期分组并应用过滤逻辑 result_df = df.groupby('Date', group_keys=False).apply(filter_group) print(result_df)
代码说明
- 定义
filter_group函数处理单个日期分组:- 找到组内“chicken price”对应的行索引
- 截取从该索引到组末尾的所有行,自动剔除了前面的“egg price”及中间行
- 使用
groupby('Date')按日期分组,apply函数将过滤逻辑应用到每个分组,group_keys=False避免分组键被添加为额外列
运行上述代码即可得到目标结果。
内容的提问来源于stack exchange,提问作者Riza Purnaramadhan
相关产品推荐
相关产品推荐

