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

如何在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)

代码说明

  1. 定义filter_group函数处理单个日期分组:
    • 找到组内“chicken price”对应的行索引
    • 截取从该索引到组末尾的所有行,自动剔除了前面的“egg price”及中间行
  2. 使用groupby('Date')按日期分组,apply函数将过滤逻辑应用到每个分组,group_keys=False避免分组键被添加为额外列

运行上述代码即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:45:41