当前位置: 首页 > 知识库问答 >
问题:

python中是否有类似的公式,如IFERROR、IF、MATCH、SEARCH、INDEX等?

常光明
2023-03-14

我有3套Excel数据在3个不同的文件,我想使用匹配和搜索功能,然后索引结果,保存在一个新的文件。

df = pd.DataFrame({'date': [16042020, 20042020, 16042020, 16042020, 17042020],
                    'no' : [230255,1755,210520, 65556,12355],
                    'des': ['ant','flower', 'happy','hate', 'okay'],
                    'des2': ['cheeeee','die', 'of','bore','sad']})

df1 = pd.DataFrame({ 'condition': ['good', 'bad', 'good',  'good',  'bad'],
                    'no': [230255,  1755,  7897, 6666, 1311],
                    'des': ['ant', 'flower', 'happy', 'hate','okay'],
                    'which no': ['1234', '5555', '3535','1359','8979']})

df2 = pd.DataFrame({ 'condition': ['bad', 'bad', 'good', 'good','good'],
                      'no': [46451,  448713, 210520, 65556, 8795],
                     'des': ['ant','flower', 'happy','hate', 'okay'],
                     'which no': [1234,  5555, 3535, 1359,8979]})

OUTPUT:
df     date      no     des     des2
0  16042020  230255     ant  cheeeee
1  20042020    1755  flower      die
2  16042020  210520   happy       of
3  16042020   65556    hate     bore
4  17042020   12355    okay      sad

df1 condition    no     des which no
0      good  230255     ant     1234
1       bad    1755  flower     5555
2      good    7897   happy     3535
3      good    6666    hate     1359
4       bad    1311    okay     8979

df2  condition   no     des  which no
0       bad   46451     ant      1234
1       bad  448713  flower      5555
2      good  210520   happy      3535
3      good   65556    hate      1359
4      good    8795    okay      8979

我的目的是在df1的“否”中搜索df的“否”,条件“条件”=“良好”,输出“其中否”,如果为真,如果为假,在df2中搜索,如果仍然为假,则输出“不匹配”

如果我使用谷歌工作表,公式如下:

df'result' = iferror(index(df1'which no', match(1,search(isnumber(df'no',df1'no')))*(df1'condition' = "good"),0)),iferror(index(df2'which no', match(1,search(isnumber(df'no',df2'no')))*(df2'condition' = "good"),0))),"NO MATCH")

RESULT: 
       date      no     des     des2   **result**
0  16042020  230255     ant  cheeeee     1234
1  20042020    1755  flower      die     NO MATCH
2  16042020  210520   happy       of     3535
3  16042020   65556    hate     bore     1359
4  17042020   12355    okay      sad     NO MATCH

在df excel文件的新列和另一个新列中,我的输出应该如下所示,该列显示数据来自哪个列表(df1/df2)

**result**     **from which list**
0   1234         df1
1  NO MATCH      NONE
2  3535          df2
3  1359          df2
4  NO MATCH     NONE

共有1个答案

寿浩言
2023-03-14

想法是先使用concat,然后只过滤good行,必要时还可以通过no通过DataFrame过滤掉重复的行。删除重复项

df3 = pd.concat([df1, df2]).query('condition == "good"').drop_duplicates('no')
print (df3)
  condition      no    des which no
0      good  230255    ant     1234
2      good    7897  happy     3535
3      good    6666   hate     1359
2      good  210520  happy     3535
3      good   65556   hate     1359
4      good    8795   okay     8979

然后是数据帧。通过左连接合并,并通过数据帧替换缺少的值。fillna:

df = df.merge(df3[['no','which no']], on='no', how='left').fillna({'which no':'NO MATCH'})
print (df)
       date      no     des     des2  which no
0  16042020  230255     ant  cheeeee      1234
1  20042020    1755  flower      die  NO MATCH
2  16042020  210520   happy       of      3535
3  16042020   65556    hate     bore      1359
4  17042020   12355    okay      sad  NO MATCH

编辑:如果将参数数据帧一起使用。重置索引将创建新列:

df3 = (pd.concat([df1, df2], keys=('df1','df2'))
        .reset_index()
        .rename(columns={'level_0':'from which list'})
        .query('condition == "good"'))
print (df3)
  from which list  level_1 condition      no    des which no
0             df1        0      good  230255    ant     1234
2             df1        2      good    7897  happy     3535
3             df1        3      good    6666   hate     1359
7             df2        2      good  210520  happy     3535
8             df2        3      good   65556   hate     1359
9             df2        4      good    8795   okay     8979

...然后在df3中筛选列表中的此列:

df = (df.merge(df3[['no','which no', 'from which list']], on='no', how='left')
       .fillna({'which no':'NO MATCH'}))
print (df)
       date      no     des     des2  which no from which list
0  16042020  230255     ant  cheeeee      1234             df1
1  20042020    1755  flower      die  NO MATCH             NaN
2  16042020  210520   happy       of      3535             df2
3  16042020   65556    hate     bore      1359             df2
4  17042020   12355    okay      sad  NO MATCH             NaN

 类似资料:
  • 我想用超文本标记语言检查某个文本,比如“无值”,如果存在,就给它赋值0。有人知道怎么做吗?(谷歌了很多,但没有找到任何相关的东西)

  • 问题内容: 如果不 遍历整个数组,如何使用Go 检查数组中是否存在?语言有结构吗? 像Python: 问题答案: Go中没有内置的运算符。您需要遍历数组。您可以编写自己的函数来执行此操作,如下所示: 如果您希望能够在不迭代整个列表的情况下检查成员资格,则需要使用映射而不是数组或切片,如下所示:

  • 本文向大家介绍Python中正则表达式match()、search()函数及match()和search()的区别详解,包括了Python中正则表达式match()、search()函数及match()和search()的区别详解的使用技巧和注意事项,需要的朋友参考一下 match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在

  • 问题内容: Python具有不错的功能。是否有等效的PHP? 问题答案: 只要所有数组的长度相同,就可以将with 作为第一个参数使用。 如果某些数组较短,则将使用null填充最长数组的长度,这与python不同,返回的结果是最短数组的长度。

  • 问题内容: 我喜欢整个WMI概念,并且可以在Linux(在某些脚本中)中真正使用它。Linux系统有类似的东西吗? 问题答案: 并不是的。您是否正在使用WMI获取系统参数,查询过程,更改配置或监视系统事件,等等? 内核通过和文件系统公开了许多信息和可调旋钮。没有查询语言,只有目录和文件的组织层次结构。其中一些文件是只读,读写或只写的。其中一些人有能力。 有些服务可能具有动态自定义客户查询和更新配置

  • 使用正则表达式有两个基本操作看起来相似但有显着差异。 re.match()仅在字符串的开头检查匹配,而re.search()检查字符串中任何位置的匹配。 这在文本处理中起着重要作用,因为我们通常必须编写正确的正则表达式来检索用于情感分析的文本块作为示例。 import re if re.search("tor", "Tutorial"): print "1. search res

  • If-Match HTTP 请求报头使得所述请求为条件。对于GET和HEAD方法,服务器将只在与请求的资源匹配时发回请求的资源ETags。对于PUT和其他非安全方法,在这种情况下它只会上传资源。 与存储的ETag比较使用强比较算法,这意味着两个文件被认为是相同的字节到字节。当W/在前面使用前缀时,这被削弱了ETag。 有两种常见用例: 对于GET和HEAD方法,与Range头部结合使用,可以保证请

  • 问题内容: Java中是否有内置方法来查找任何数据类型的大小?有什么方法可以找到尺寸? 问题答案: 否。标准Java SE类库中没有这种方法。 设计者的观点是Java不需要它,因为该语言使应用程序1无需知道需要为原始值,对象或具有给定数量的元素的数组保留多少空间。 您可能会认为sizeof运算符对需要了解其数据结构占用多少空间的人很有用。但是,您还可以使用Java内存分析器简单,可靠地获得此信息以