Pandas如何输出同一主类别下跨子类别重复的字符串值
解决方案
用pandas即可完成需求,核心逻辑是统计每个主类别下每个字符串对应的不同子类别的数量,筛选出符合多子类别出现要求的字符串后按格式输出即可。
完整可运行代码
import pandas as pd # 构造示例数据,你可以替换成自己的df读取代码 df = pd.DataFrame({ 'CAT A': ['A1','A1','A1','A1','A1','A1','A2','A2','A2','A2','A2','A2'], 'CAT B': ['B1','B1','B1','B2','B2','B2','B1','B1','B1','B2','B2','B2'], 'Strings': ['String1','String2','String3','String4','String5','String1','String1','String2','String3','String4','String5','String6'] }) # 1. 统计每个【主类别+字符串】组合对应的不同子类别数量 str_subcat_count = df.groupby(['CAT A', 'Strings'])['CAT B'].nunique().reset_index(name='subcat_count') # 2. 筛选出在至少2个子类别中出现的字符串 # 如果你要求字符串必须在该主类别的所有子类别中都出现,可把>=2改成==对应主类别的子类别总数 multi_occur_str = str_subcat_count[str_subcat_count['subcat_count'] >= 2] # 3. 按要求格式输出 for main_cat in df['CAT A'].unique(): print(main_cat) sub_cats = ' and '.join(df[df['CAT A'] == main_cat]['CAT B'].unique()) print(f'Repeated strings in {sub_cats}') matched_str = multi_occur_str[multi_occur_str['CAT A'] == main_cat]['Strings'].tolist() if not matched_str: print('None') else: for s in matched_str: print(f'"{s}"') print('\n---\n')
输出结果和你给出的期望完全一致:
A1 Repeated strings in B1 and B2 "String1" --- A2 Repeated strings in B1 and B2 None ---
内容的提问来源于stack exchange,提问作者Damon Obako
相关产品推荐
相关产品推荐

