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

基于排名条件删除DataFrame行:排序、填充与行删除处理

解决方案

步骤说明与代码实现

首先导入所需依赖库:

import pandas as pd
import numpy as np

原DataFrame定义:

raw_data = {
'code': [1,1,1,1,2,2,2,2],
'Date': ['2022-01-04','2022-01-01', '2022-01-03','2022-01-02', '2022-01-08', '2022-01-07','2022-01-06','2022-01-05'],
'flag_check': [np.NaN, np.NaN, '11-33-24-33333' ,np.NaN, np.NaN,'11-55-24-33443' ,np.NaN, np.NaN],
'rank':[np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN]
}

df = pd.DataFrame(raw_data, columns=['code', 'Date','flag_check', 'rank'])

1. 转换日期格式并排序

先将Date列转为datetime类型,确保后续排序遵循正确的时间逻辑:

df['Date'] = pd.to_datetime(df['Date'])
# 按code分组后对Date升序排序
df = df.sort_values(['code', 'Date'])

2. 填充rank列的连续序号

通过分组后的cumcount()方法生成从1开始的连续序号:

df['rank'] = df.groupby('code').cumcount() + 1

3. 删除flag_check非空行之后的所有行

自定义分组过滤函数,保留每个分组中第一个非空flag_check行及之前的所有内容:

def filter_group(group):
    flag_indices = group[group['flag_check'].notna()].index
    if flag_indices.size > 0:
        return group.loc[:flag_indices[0]]
    return group

df = df.groupby('code', group_keys=False).apply(filter_group)

最终结果

执行上述代码后,输出的DataFrame如下:

code       Date       flag_check  rank
1     1 2022-01-01              NaN     1
3     1 2022-01-02              NaN     2
2     1 2022-01-03  11-33-24-33333     3
7     2 2022-01-05              NaN     1
6     2 2022-01-06              NaN     2
5     2 2022-01-07  11-55-24-33443     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:50