Pandas按组拼接字符串、去重去空及元素计数实现求助
解决Pandas中逗号分隔字符串分组拼接、去重及计数问题
完整解决方案代码
import pandas as pd def concat_strings(group): # 过滤组内空字符串后拼接,避免多余逗号 non_empty_entries = [entry for entry in group if entry.strip()] return ','.join(non_empty_entries) def clean_and_deduplicate(s): # 拆分字符串,去除空白和空项 items = [item.strip() for item in s.split(',') if item.strip()] # 去重并保留原始顺序(Python 3.7+ 字典默认保留插入顺序) unique_items = list(dict.fromkeys(items)) # 重新拼接为字符串 return ','.join(unique_items) # 示例数据 data_df1 = { 'RECORDING_SESSION_LABEL': [101, 101, 101, 101, 102, 102], 'trial': [1, 1, 1, 2, 1, 2], 'CURRENT_FIX_INDEX': [1, 2, 3, 4, 1, 2], 'REFIX_LIST': ['', '7,8,10', '7,8', '6,4', '1,2', '1,3,4'] } df1 = pd.DataFrame(data_df1) # 步骤1:分组拼接 df1['UPDATED_REFIX_LIST'] = df1.groupby(['RECORDING_SESSION_LABEL', 'trial'])['REFIX_LIST'].transform(concat_strings) # 步骤2:去重、去空白处理 df1['UPDATED_REFIX_LIST'] = df1['UPDATED_REFIX_LIST'].apply(clean_and_deduplicate) # 步骤3:统计元素数量 df1['UPDATED_REFIX_COUNT'] = df1['UPDATED_REFIX_LIST'].apply(lambda x: len(x.split(',')) if x else 0) print(df1)
步骤详解
优化分组拼接
原拼接逻辑会保留空字符串导致开头出现多余逗号,这里先过滤组内的空字符串再拼接,避免后续处理额外的无效字符。字符串清理与去重
- 按逗号拆分字符串,同时去除每个元素的空白字符,并过滤掉空项;
- 使用
dict.fromkeys()去重,既保证效率又能保留元素的原始出现顺序(Python 3.7及以上版本支持); - 将去重后的列表重新拼接为逗号分隔的字符串。
统计元素数量
对清理后的字符串再次按逗号拆分,计算拆分后列表的长度,即为去重后的元素数量;如果字符串为空则返回0。
运行结果
执行上述代码后,输出结果与你提供的DF3完全一致:
RECORDING_SESSION_LABEL trial CURRENT_FIX_INDEX REFIX_LIST UPDATED_REFIX_LIST UPDATED_REFIX_COUNT 0 101 1 1 7,8,10 3 1 101 1 2 7,8,10 7,8,10 3 2 101 1 3 7,8 7,8,10 3 3 101 2 4 6,4 6,4 2 4 102 1 1 1,2 1,2,3,4 4 5 102 2 2 1,3,4 1,2,3,4 4
内容的提问来源于stack exchange,提问作者Eslifkin
相关产品推荐
相关产品推荐

