如果列值与熊猫中另一个数据框的列值部分匹配,则搜索列值

时间:2021-06-26 22:37:17

标签: python pandas dataframe data-analysis

我遍历了 24 个 excel 文件并将该文件名存储到数据框中。所以我的 df1 只保存一个值,每次迭代文件名都会改变。
df1:
文件名_t
自适应 CBSS 索引模板

然后嵌套循环遍历该 excel 文件的工作表并将该工作表名称存储到 dataframe2 中。
df2:
Sheetname_t
自定义 IP 定位

我想从 df3 获取分组,它们都匹配。 (部分)

df3:

enter image description here

简单来说我想要的是:
如果 df1.Filename_t 与 df3.Filename
匹配 然后匹配
如果 df2.Sheetname_t 与 df3.Sheetname
匹配 然后
返回对应的 df3.Grouping 值。

请注意,实际文件名及其工作表名称与 df3 中存储的文件名和工作表名称不同。这才是真正的问题。

我尝试使用此代码将分组存储在 df1 中,但没有奏效。

for tup in df3.itertuples(index=False):
    print(tup)
    mask = df1['Filename_t'].str.contains(tup.Filename, regex=False)
    df1.loc[mask, 'Grouping'] = tup.Grouping

print(df1)

也试过了:

m= df3['Filename'].apply(lambda fname: any(word in fname for word in f))
print(m)  

和:

pat = '('+'|'.join(df3['Filename'])`+')'
df_f["Grouping"] = df1['Filename_t'].str.extract(pat)[0].map(df3.set_index('Filename')['Grouping'].to_dict()).fillna('')
print(df1)

0 个答案:

没有答案