我有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
想法是先使用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内存分析器简单,可靠地获得此信息以