Python中基于原DataFrame提取重复字符串片段生成新DataFrame
解决思路与实现代码
核心逻辑
先提取URL中/分割后的有效部分(去掉开头的url),统计所有元素的全局出现频次,再筛选出每行中在至少两行出现过的元素;若该行没有符合条件的元素,则用[""]填充。
分步实现
分割字符串提取有效部分
对col1的每个URL按/分割,去掉第一个元素url,得到每行的元素列表。统计元素全局出现频次
收集所有行的元素,用计数器统计每个元素的出现次数,找出重复出现的元素。筛选每行的重复元素
遍历每行的元素列表,仅保留出现次数≥2的元素;若筛选结果为空,则替换为[""]。
完整代码
import pandas as pd from collections import Counter # 原DataFrame d = {'col1': ["url/a/b/c/d", "url/b/c/d", "url/j/k", "url/t/y", 'url/r/a/y'], 'id': [1, 2, 3, 4, 5]} df = pd.DataFrame(data=d) # 分割字符串,提取去掉url后的部分 df['split_col'] = df['col1'].str.split('/').str[1:] # 统计所有元素的出现次数 all_elements = [elem for sublist in df['split_col'] for elem in sublist] elem_counts = Counter(all_elements) # 定义筛选函数:保留重复出现的元素,无则返回[""] def filter_duplicates(lst): filtered_items = [item for item in lst if elem_counts[item] >= 2] return filtered_items if filtered_items else [""] # 生成结果并整理DataFrame df['col1'] = df['split_col'].apply(filter_duplicates) df_result = df[['id', 'col1']].copy() # 输出结果 print(df_result)
运行结果
id col1 0 1 [a, b, c, d] 1 2 [b, c, d] 2 3 [""] 3 4 [y] 4 5 [a, y]
内容的提问来源于stack exchange,提问作者Catarina Nogueira
相关产品推荐
相关产品推荐

