如何将Pandas DataFrame中的PT字段与对象列表匹配并添加对应分组字段
解决Pandas DataFrame匹配分组的问题
这里有两种实用的方法来实现你需要的PT字段与group的匹配需求:
方法1:字典映射(高效简洁)
先把你的myList转换成一个以label为键、group为值的字典,然后用Pandas的map()方法快速完成匹配,最后填充无匹配项的标记值:
import pandas as pd # 初始化你的数据 df = pd.DataFrame({'Number': [5, 64, 7], 'PT': ['AA', 'BB', 'CC']}) myList = [{'label': 'AA', 'value': 'AA', 'group': 'A'}, {'label': 'BB', 'value': 'BB', 'group': 'B'}] # 转换为匹配字典 group_map = {item['label']: item['group'] for item in myList} # 匹配并填充无匹配项 df['group'] = df['PT'].map(group_map).fillna('NOT_MATCHED') print(df)
运行后输出结果:
Number PT group 0 5 AA A 1 64 BB B 2 7 CC NOT_MATCHED
方法2:DataFrame合并(适合复杂场景)
如果后续你的myList可能涉及更复杂的匹配逻辑,可以先把它转换成DataFrame,再和原数据做左连接,最后处理空值:
import pandas as pd df = pd.DataFrame({'Number': [5, 64, 7], 'PT': ['AA', 'BB', 'CC']}) myList = [{'label': 'AA', 'value': 'AA', 'group': 'A'}, {'label': 'BB', 'value': 'BB', 'group': 'B'}] # 转换myList为DataFrame,只保留需要的字段 group_df = pd.DataFrame(myList)[['label', 'group']] # 左连接匹配,匹配后删除冗余字段 df = df.merge(group_df, left_on='PT', right_on='label', how='left').drop('label', axis=1) # 填充无匹配项的标记值 df['group'] = df['group'].fillna('NOT_MATCHED') print(df)
这个方法的输出和方法1完全一致,适合需要保留更多myList字段或者多条件匹配的场景。
内容的提问来源于stack exchange,提问作者Crovish
相关产品推荐
相关产品推荐

