首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用列组合查找行熊猫中的数据不匹配

使用列组合查找行熊猫中的数据不匹配
EN

Stack Overflow用户
提问于 2018-11-20 13:42:19
回答 3查看 2.5K关注 0票数 1

基于列值组合获得所有单元格值的最佳方法是什么?

样本数据一:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  Stock                         Name  Price
0    AMD       Advanced Micro Devices    100
1     GE     General Electric Company    200
2    BAC  Bank of America Corporation    300
3   AAPL                   Apple Inc.    500
4   MSFT        Microsoft Corporation   1000
5  GOOGL                Alphabet Inc.   2000

样本数据二:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  Stock                         Name  Price
0    AMD       Advanced Micro Devices    100
1     GE     General Electric Company    200
2    BAC  Branch of America Corporation  300
3   AAPL                   Apple Inc.    500
4   MSFT        Microsoft Corporation   1000
5  GOOGL                Alphabet Inc.   2000

例如:我想使用(Stock和Name)作为键列,然后比较数据集。目的是将两个数据集之间的不匹配项与用作组合键的Stock+Name列打印出来。

我正在使用Pandas/Python3.7 3.7

样本输出:

美国银行300 .美国银行300分行

EN

回答 3

Stack Overflow用户

发布于 2018-11-20 13:45:43

也许,使用merge + query实现完整的内部连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1.merge(df2, on='Stock').query('Name_x != Name_y')

  Stock                       Name_x  Price_x                         Name_y  Price_y
2   BAC  Bank of America Corporation      300  Branch of America Corporation      300

或者,一个与map稍有不同的解决方案,您可以使用它获取股票符号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
m = df1.Stock.map(df2.set_index('Stock').Name).ne(df1.Name)
symbols = df1.loc[m, 'Stock']

print(symbols)
2    BAC
Name: Stock, dtype: object

然后按股票代码访问每个DataFrame行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1[df1.Stock.isin(symbols)]
  Stock                         Name  Price
2   BAC  Bank of America Corporation    300

df2[df2.Stock.isin(symbols)]
  Stock                           Name  Price
2   BAC  Branch of America Corporation    300
票数 2
EN

Stack Overflow用户

发布于 2018-11-20 13:52:33

如果它们位于两个数据流中,那么不附加条件地将它们合并到.concat中是非常简单的。一旦它们被加入,这里有一种方法可以得到不匹配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

df1 = pd.DataFrame({
    "Ticker_y": list("qwerty"),
    "Name_y": list("asdfgh"),
    "Ticker_x": list("qw3r7y"),
    "Name_x": list("as6f8h")
})

mismatch = df1[(df1["Ticker_y"] != df1["Ticker_x"]) & (df1["Name_y"] != df1["Name_x"])]

最后一行只是说“df只满足这些条件”。

票数 0
EN

Stack Overflow用户

发布于 2018-11-20 20:23:54

我们可以使用isin使用值序列进行测试,因为它确保DataFrame中的每个元素都包含在值中。

First DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df1
   Stock                         Name  Price
0    AMD       Advanced Micro Devices    100
1     GE     General Electric Company    200
2    BAC  Bank of America Corporation    300
3   APPL                   Apple Inc.    500
4   MSFT        Microsoft Corporation   1000
5  GOOGL                Alphabet Inc.   2000

第二DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df2
   Stock                           Name  Price
0    AMD         Advanced Micro Devices    100
1     GE       General Electric Company    200
2    BAC  Branch of America Corporation    300
3   APPL                     Apple Inc.    500
4   MSFT          Microsoft Corporation   1000
5  GOOGL                  Alphabet Inc.   2000

你可以走了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df2[~df2.Name.isin(df1.Name.values)]
  Stock                           Name  Price
2   BAC  Branch of America Corporation    300

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> df1[~df1.Name.isin(df2.Name.values)]
  Stock                         Name  Price
2   BAC  Bank of America Corporation    300
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53402012

复制
相关文章
python中的lambda表达式
这就是求x+y用普通方法定义函数和用lambda表达式的区别。lambda表达式没有函数名,x, y 与定义一般函数时括号中的参数一致,‘:’右边的是要返回的值。lambda表达式不需要用”return”关键字返回内容,函数默认会返回”:”右边的值。注意例子中的lambda表达式没有函数名
灯珑LoGin
2022/10/24
5130
Python中的lambda表达式
在Python中,除了常规函数,你应该也会在代码中见到一些“非常规”函数,它们往往很简短,就一行,并且有个很酷炫的名字——lambda,没错,这就是匿名函数。
全栈程序员站长
2022/11/02
5600
python lambda表达式举例_Python中lambda表达式[通俗易懂]
lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值。
全栈程序员站长
2022/11/07
6450
Qt中的lambda表达式
这里为什么值传递可以修改按钮的文本属性呢? 因为这里拷贝的是地址,lambda函数体内通过值传递得到的btn指向的地址不变。
大忽悠爱学习
2021/11/15
9650
java中lambda表达式[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156874.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/08
4070
java中lambda表达式[通俗易懂]
lambda表达式python_Python中的Lambda表达式「建议收藏」
Lambda表达式在python程序中是一种很常见的匿名方法的书写形式,它书写起来非常简单,但是牺牲了可读性。下面来看一下Lambda的简单介绍。
全栈程序员站长
2022/11/02
3290
带你彻底掌握 Lambda 表达式(上)
但平时在和很多小伙伴的交流和面试中,发现很多人仍停留在 JDK7 及以前的认知层面,Lambda 表达式、方法引用、Stream 流、default 关键字,很少使用,甚至还有不少小伙伴不知道怎么用!!
天之痕苏
2020/02/11
4520
带你彻底掌握 Lambda 表达式(上)
java中Lambda表达式的使用
Lambda 表达式是一种匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。
大道七哥
2019/08/23
2.4K0
java中Lambda表达式的使用
说说Python中的lambda表达式?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
3770
C#中的Lambda表达式
在看C#中的Lambda表达式之前,先来看一个概念:匿名方法。学过Java的亲们,可能对这个概念比较了解。Java JDK8中也引入了Lambda表达式。
卡尔曼和玻尔兹曼谁曼
2019/01/25
8010
C#中的Lambda表达式
浅谈 Java 中的 Lambda 表达式
Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。在 Java8 中,它和函数式接口一起,共同构建了函数式编程的框架。
浪漫主义狗
2023/09/04
3750
浅谈 Java 中的 Lambda 表达式
C++中Lambda表达式
lambda introducer [lambda-introducer],标识一个Lambda表达式的开始,这部分必须存在,不能省略。lambda-introducer中的参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式: 1、[]:不使用任何对象参数。 2、[=]:函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。 3、[&]:函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。 4、[this]:函数体内可以使用Lambda所在类中的成员变量。 5、[a]:将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。要修改传递进来的a的拷贝,可以添加mutable修饰符。 6、[&a]:将a按引用进行传递。 7、[a, &b]:将a按值进行传递,b按引用进行传递。 8、[=,&a, &b]:除a和b按引用进行传递外,其他参数都按值进行传递。 9、[&, a, b]:除a和b按值进行传递外,其他参数都按引用进行传递。
卡尔曼和玻尔兹曼谁曼
2019/01/22
8780
C++中Lambda表达式
python中bool函数_bool()函数以及Python中的示例
bool() function is used to convert a given value to the Boolean value (True or False) as per the standard truth testing procedures. It accepts a value (like an integer, list, maps, etc) and converts it into a Boolean value.
全栈程序员站长
2022/09/05
1.6K0
Java中lambda表达式详解
上面的代码中,e是一个lambda的对象,根据java的继承的特性,我们可以说e对象的类型是继承自eat接口。而e1是一个正常的匿名类的对象.
付威
2018/12/05
4.7K0
Java中lambda表达式详解
Java中的小知识——lambda表达式
但是我们发现,这样虽然在步骤上简单了许多,但是在空间上看着并不简单,甚至显得比较复杂。
用户7073689
2020/03/17
9930
Python中lambda表达式的常见用法
非常抱歉,昨天发的代码中有一处小错误,已通过留言的方式进行了纠正,详情请见【详解Python列表推导式】 lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数。lambda表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,并支持默认值参数和关键参数,该表达式的计算结果相当于函数的返回值。下面的代码演示了不同情况下lambda表达式的应用。 >>> f = lambda x, y, z: x+y+z #把lambda表达式当做函数使用 >>> print(f
Python小屋屋主
2018/04/16
1.2K0
Java中的集合转换(lambda表达式)
        在Java应用中进行集合对象间的转换是非常常见的事情,有时候在处理某些任务时选择一种好的数据结构往往会起到事半功倍的作用,因此熟悉每种数据结构并知道其特点对于程序员来说是非常重要的,而只知道这些是不够的,有时候你需要一个Map来处理数据,而此时你手中只有一个List,此时知道如何将List转为Map就非常重要了,而只知道for循环将List转为Map这就太Low了,JDK1.8 吸收了许多函数式编程的思想,其中的lambda表达式不仅功能强大,而且减少了很多不必要的代码,本文不是介绍lambda表达式的,主要是利用lambda表达式进行Java中结合的转换,当然lambda表达式的使用往往离不开JDK1.8 的stream类,本文主要使用lambda表达式和stream类来实现Java中集合的转换,也会涉及到利用stream对数据进行的一些处理。
Tyan
2022/05/09
7950
Java8中的Lambda表达式
大家好啊,我是汤圆,今天给大家带来的是《Java8中的Lambda表达式》,希望对大家有帮助,谢谢
汤圆学Java
2021/04/16
3280
Java8中的Lambda表达式
如何在 Linux 中检查打开的端口?
无论您是使用 Linux 作为服务器还是桌面,了解开放端口或正在使用的端口在各种情况下都会有所帮助。
网络技术联盟站
2022/04/03
7.6K0
如何在 Linux 中检查打开的端口?
点击加载更多

相似问题

如何在lambda表达式中检查null

35

用<bool>和System.Nullable<bool>实现Lambda表达式

70

ReactriveX:将Observable<bool>上的异常捕获为lambda表达式

13

在lambda表达式中否定Func<T、bool>

25

在if语句中返回bool的Lambda表达式

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文