如何为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
相关产品推荐
相关产品推荐

