Excel技巧:判断某一列中的数据是不是在另一列中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel技巧:判断某一列中的数据是不是在另一列中相关的知识,希望对你有一定的参考价值。

Excel中如何判断某一列中的数据是否在另一列中呢?看一下具体操作步骤吧。

材料/工具

Excel

方法

    1/3

    在B列右边的空白列中,输入如下公式:=COUNTIF(E4:E12,F4),E4:E12 代表A列中的所有数据,F4 代表B列中的一个单元格。

    请点击输入图片描述

    2/3

    输入完成后,点击回车。单元格的数据就自动计算出来了。其中1就代表存在,0就代表不存在。

    请点击输入图片描述

    3/3

    下拉单元格就能进行判断所有数据了。

    请点击输入图片描述

    声明 本文系本人根据真实经历原创,未经许可,请勿转载。

参考技术A =COUNTIF($A$1:$A$10,B1);B1的内容查询是否在A1-A10中存在,输出有1,无0,然后B列下拉,第一列需要增加绝对引用符合,不然下拉会增加表格序号导致错误,已应用。

Pandas:根据字符串的一部分是不是在另一列中的任何位置创建新列

【中文标题】Pandas:根据字符串的一部分是不是在另一列中的任何位置创建新列【英文标题】:Pandas: Creating a new column based on if part of a string is anywhere in another columnPandas:根据字符串的一部分是否在另一列中的任何位置创建新列 【发布时间】:2022-01-21 02:11:36 【问题描述】:

假设我们有两个数据框:

df1 = pd.DataFrame(
0: 'ETERNITON',
1: 'CIELOON',
2: 'M.DIASBRANCOON',
3: 'IRBBRASIL REON',
4: '01/00 ATACADÃO S.A ON',
5: 'AMBEV S/A ON',
6: '01/00 RUMO S.A. ON',
7: 'COGNA ONON',
8: 'CURY S/A'.items(), columns=['index', 'name']).set_index('index')

df2 = pd.DataFrame('name': 0: 'ALLIARON', 1: 'M.DIASBRANCOON', 2: 'AMBEVS/AON', 3: 'CIELOON',
  4: 'AESBRASILON', 5: 'BRASILAGROON', 6: 'IRBBRASILREON', 7: 'ATACADÃOS.AON', 8: 'ALPARGATASON',
  9: 'RUMOS.A.ON', 10: 'COGNAONON',
 'yf_ticker': 0: 'AALR3.SA', 1: 'MDIA3.SA', 2: 'ABEV3.SA', 3: 'CIEL3.SA', 4: 'AESB3.SA',
  5: 'AGRO3.SA', 6: 'IRBR3.SA', 7: 'CRFB3.SA', 8: 'ALPA3.SA', 9: 'RAIL3.SA', 10: 'COGN3.SA')

我想使用 df2 中的列“yf_ticker”在 df1 中创建一个新列(“ticker”)。如果df2['yf_ticker'] 中的名称/字符串在df1['name'] 中(即使它不完全匹配),则将 df2 中的 yf_ticker 添加到 df1['ticker'] 中的该行。为了清楚起见,预期的输出将类似于:

print(df1)
name                    ticker
ETERNITON               Missing or N/A or Nan
CIELOON                 CIEL3.SA
M.DIASBRANCOON          MDIA3.SA
IRBBRASIL REON          IRBR3.SA
01/00 ATACADÃO S.A ON   CRFB3.SA
AMBEV S/A ON            ABEV3.SA
01/00 RUMO S.A. ON      RAIL3.SA
COGNA ONON              COGN3.SA
CURY S/A                Missing or N/A or Nan

我尝试过的解决方案:


df1['name'] = df1['name'].str.replace(" ","")

for i in range(len(df1)):
    for j in range(len(df2)):
        if df2.iloc[j,0] in df1.iloc[i,0]:
            df1.loc[i, 'ticker'] = df2.iloc[j,1]

虽然它有效,但在我看来,用于更大数据集的这种 for 循环效率低下。有没有更快(或“矢量化”)的方法来做到这一点?

【问题讨论】:

嗨@Chris。我编辑了我的问题以添加我尝试过的解决方案。你会有不同的方法吗? 你可以尝试左连接或映射吗? 问题是"not an exactly match",因为标准函数可能适用于"exactly match" 对于"not an exactly match",它可能需要使用"fuzzy matching",首先可能需要在name的所有对之间计算similarityDataFrame,然后获得最大similarity的值.但这一切可能需要"fuzzy matching" 的外部模块并在for-loop 中工作。 【参考方案1】:

我建议对name 列进行模糊匹配,然后从匹配行中获取yf_ticker。下面是一个python内置difflib的例子:

import difflib

df1['yf_ticker'] = df1['name'].apply(lambda x: df2.loc[df2['name'] == y[0], 'yf_ticker'].iloc[0] if (y := (difflib.get_close_matches(x, df2.name))) else None)

输出:

index name yf_ticker
0 ETERNITON
1 CIELOON CIEL3.SA
2 M.DIASBRANCOON MDIA3.SA
3 IRBBRASIL REON IRBR3.SA
4 01/00 ATACADÃO S.A ON CRFB3.SA
5 AMBEV S/A ON ABEV3.SA
6 01/00 RUMO S.A. ON RAIL3.SA
7 COGNA ONON COGN3.SA
8 CURY S/A

【讨论】:

以上是关于Excel技巧:判断某一列中的数据是不是在另一列中的主要内容,如果未能解决你的问题,请参考以下文章

excel如何判断某一列内容是不是包含在另一列中

excel中判断一个表中的某一列的数据在另一个表中的某一列中是不是存在

excel用啥公式能找出某一单元格中的其中某些数据是不是在另一列中显示?

关于Excel判断一列数据是不是在另一列中存在,并且把存在的数据提取出来

EXCEL 比较一列数据是不是在另一列出现过

EXCEL 如何查询一个数据是不是在某一列中