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

如何为Pandas按多列分组的子DataFrame的check_control列加递增编号

给分组后的Pandas DataFrame中check项添加递增编号

需求:现有一个已按['color', 'category','level_1']列排序的Pandas DataFrame,需为每个以这三列分组的子DataFrame,将check_control列中的'check'项替换为递增编号加_check的格式(如1_check、2_check)。

原数据与排序结果

原数据代码

import pandas as pd
data = {'Name_1': ['dshgfj', 'krihgfjsh', 'dfgfd', 'dff','gcgt','hjgjh','et','asd','hhj','hg','jh','jhk'],
        'Name_2': ['dsf', 'dsfs', 'bilsdfl', 'sfsd', 'tcbcvbo','hghjg','bvnbhj','hga','kjk','kjh','hjjh','jkh'],
        'color': ['black', 'red', 'white', 'yellow', 'blue','green','orange','black','green','black','green','black'],
       'category': ['a', 'b', 'a', 'b', 'b','c','c','a','c','a','c','a'],
        'level_1': [1, 1, 1, 1, 1,1,1,2,2,3,3,4],
    'check_control':['','check','','check','','check','check','','','check','check','check']
}      
df = pd.DataFrame(data)
df_fix  = df.sort_values(['color', 'category','level_1'], ascending=[True, True,True])
print(df_fix)

排序后输出

Name_1   Name_2   color category  level_1 check_control
0      dshgfj      dsf   black        a        1
7         asd      hga   black        a        2
9          hg      kjh   black        a        3         check
11        jhk      jkh   black        a        4         check
4        gcgt  tcbcvbo    blue        b        1
5       hjgjh    hghjg   green        c        1         check
8         hhj      kjk   green        c        2
10         jh     hjjh   green        c        3         check
6          et   bvnbhj  orange        c        1         check
1   krihgfjsh     dsfs     red        b        1         check
2       dfgfd  bilsdfl   white        a        1
3         dff     sfsd  yellow        b        1         check

解决方案实现

通过groupby按指定列分组,对每个组内的check_control列进行处理:标记出值为'check'的行,为这些行分配组内递增序号,再拼接成{序号}_check的格式,非'check'的行保持原内容。

实现代码

# 基于已排序的df_fix进行处理
df_fix['check_control'] = df_fix.groupby(['color', 'category','level_1'])['check_control'].apply(
    lambda x: x.mask(x == 'check', x[x == 'check'].reset_index(drop=True).index + 1).astype(str) + '_check'
).replace('nan_check', '')

print(df_fix)

运行结果

Name_1   Name_2   color category  level_1 check_control
0      dshgfj      dsf   black        a        1
7         asd      hga   black        a        2
9          hg      kjh   black        a        3       1_check
11        jhk      jkh   black        a        4       2_check
4        gcgt  tcbcvbo    blue        b        1
5       hjgjh    hghjg   green        c        1       1_check
8         hhj      kjk   green        c        2
10         jh     hjjh   green        c        3       2_check
6          et   bvnbhj  orange        c        1       1_check
1   krihgfjsh     dsfs     red        b        1       1_check
2       dfgfd  bilsdfl   white        a        1
3         dff     sfsd  yellow        b        1       1_check

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:45:12