如何在数据框名称而不是列中查找字符串?

Posted

技术标签:

【中文标题】如何在数据框名称而不是列中查找字符串?【英文标题】:How to look for a string in a dataframe name but not in a column? 【发布时间】:2021-09-16 00:36:16 【问题描述】:

我想知道如何使用 str.contains 作为数据框名称,但不在数据框的列中。我有一个 df1,其列目标包含诸如肺、tum、肝等字符串。我有多个 df2,其中包含名称中的特定目标。当 df2 的名称包含 df1 中的特定目标时,我想创建一个循环来执行条件。它会是这样的:

if df2.str.contains(target in df1):
do condition

我可以创建一个包含所有目标的列表:

target_available = df1['target'].unique().tolist() 

原来是这样:

if df2.str.contains(target_available):
do condition

所以对于我的名为 XXX_dataframe 的 df2,当 XXX 等于 target_available 中的目标时,再做条件 / 当 XXX 等于 target_available 中的另一个目标时,再做条件 / 等等。

例子:

# Few columns of a df
# The column target can have other possibilities
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', '', '']
                

# Creating the df
Model_rad= pd.DataFrame(Model_rad)

# Before creating target_ref_series data frames we need to get unique values from target in Model_rad
target_unique = Model_rad['target'].unique().tolist() 

# Creating data frames target ref series
for target in target_unique: # For each target in model rad
    # We create empty data frames target ref series from rad
    vars()[target+'_ref_series_from_rad'] = pd.DataFrame() 

# The data frames target_ref_series_from_rad have some columns but we don't need them for now

# for each models available in the column version availability
for models in Model_rad.version_availability:  
    #print(models)
    # If models exist (column where models not empty so different than '')
    if models != '':
        print(models)
        # We create the variable patho_and_target_available which is the pathology where models are not empty
        patho_and_target_available = Model_rad[Model_rad['version_availability'] != '']
   

所以此刻的想法是这样的:

when target in vars()[target+'_ref_series_from_rad'] is equals to target_available in patho_and_target_available['target'] : 

do condition

感谢您的帮助!

【问题讨论】:

您能否编辑您的问题并将小输入数据(格式正确)和预期输出放在那里? 完成了!希望越来越好,谢谢! 查看您的代码,您可能正在寻找Model_rad.groupby(["target", "version_availability"]) 但如果没有预期的结果,很难准确判断。 【参考方案1】:

我不太清楚你的意思,但如果你想检查列名是否等于某个字符串,你可以使用 df.columns.values。这会为您提供列名列表。

如果您想检查列的内容是否与特定字符串匹配,您可以使用 df['column'] == 'query' 来获取真/假系列。 此外,您可以将其用作 df_query = df[df['column'] == 'query'] 来获取过滤后的数据帧。

您可能想为每个查找值存储一个过滤的数据框,然后考虑一个字典:

df_dict = 
for val in lookup_values:
   df_dict[val] = df[df['column'] == val]

【讨论】:

以上是关于如何在数据框名称而不是列中查找字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何基于查找数据框创建数据框并在特定列中的动态和映射值上创建多列

查找名称包含固定列中特定值的列

在附属机构中查找城市名称,并将它们与其对应的国家/地区添加到数据框的新列中

如何将具有父/子层次结构的数据框转换为在单独列中具有父名称的数据框?

pySpark:如何在数据框中的 arrayType 列中获取 structType 中的所有元素名称?

在EXCEL如何在同一表格多列名称中查找数据相对应的名称