如何判断DataFrame名称包含另一DataFrame列中存储的指定目标字符串
解决方案
核心思路
str.contains是Pandas Series/列专属的字符串匹配方法,不能直接作用于DataFrame对象本身的变量名。你需要先提取变量名的字符串,再判断该字符串是否包含目标target列表中的值即可。
推荐实现方案(避免动态变量,更易维护)
不推荐用vars()动态生成变量,后续很难管理,建议用字典统一存储所有target对应的DataFrame:
import pandas as pd # 你的原有示例代码 Model_rad = {'model_uid': [1, 2, 3, 4, 5, 6, 7, 8], 'pathology': ['nsclc', 'nsclc', 'nsclc', 'covid', 'glioma', 'meningioma', 'gbm', 'breast-cancer'], 'purpose': ['', '', '', '', '', '', '', ''], 'target': ['lung', 'tum', 'tum', 'lung', 'tum', 'tum', 'tum', 'tum'], 'version_availability': ['v0.0', 'v1.0', '', 'v1.0', 'v1.0', 'v1.0', '', ''] } Model_rad= pd.DataFrame(Model_rad) target_unique = Model_rad['target'].unique().tolist() # 用字典存储所有ref dataframe,代替动态变量 ref_dfs = {} for target in target_unique: ref_dfs[f"{target}_ref_series_from_rad"] = pd.DataFrame() # 拿到可用的target列表 patho_and_target_available = Model_rad[Model_rad['version_availability'] != ''] available_targets = patho_and_target_available['target'].unique().tolist() # 遍历所有ref df判断名称匹配 for df_name, df in ref_dfs.items(): # 判断df名称是否包含任一可用target if any(target in df_name for target in available_targets): # 这里写你要执行的条件操作 print(f"匹配到目标df:{df_name},执行对应操作") # 示例操作:给df加一列标识 df['is_matched'] = True
兼容现有vars()写法的方案
如果你一定要保留之前用vars()生成动态变量的写法,可以用如下方式实现判断:
# 拿到可用target列表 patho_and_target_available = Model_rad[Model_rad['version_availability'] != ''] available_targets = patho_and_target_available['target'].unique().tolist() # 遍历所有target,判断对应的df名称是否符合要求 for target in target_unique: df_name = f"{target}_ref_series_from_rad" # 判断当前target是否在可用列表里 if target in available_targets: # 拿到对应的df对象 current_df = vars()[df_name] # 这里写你要执行的条件操作 print(f"匹配到目标df:{df_name},执行对应操作")
小提示:如果想用str.contains方法实现匹配
可以把变量名字符串转成Pandas Series后调用str.contains,多个匹配值用|拼接即可:
if pd.Series([df_name]).str.contains('|'.join(available_targets)).iloc[0]: # 执行对应操作
内容的提问来源于stack exchange,提问作者MarionEtp
相关产品推荐
相关产品推荐

