Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较具有不同列名的两个数据帧并查找匹配项_Python_Pandas_Dataframe - Fatal编程技术网

Python 比较具有不同列名的两个数据帧并查找匹配项

Python 比较具有不同列名的两个数据帧并查找匹配项,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1: df2: df2将始终有一行。如何检查df1中df2的该行是否匹配?使用Numpy比较与参数axis=1对行进行比较: df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['ss', 'sv', 'sc'], 'C': [123, 234, 333]}) df2 = pd.DataFrame({'A': [1], 'dd': ['ss'], 'xc': [123]}) df3 = df1.loc[np.all(df1.values =

我有两个数据帧:

df1:

df2:


df2将始终有一行。如何检查df1中df2的该行是否匹配?

使用Numpy比较与参数axis=1对行进行比较:

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['ss', 'sv', 'sc'], 'C': [123, 234, 333]})
df2 = pd.DataFrame({'A': [1], 'dd': ['ss'], 'xc': [123]})

df3 = df1.loc[np.all(df1.values == df2.values, axis=1),:]
或:



对行使用与参数轴=1的Numpy比较:

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['ss', 'sv', 'sc'], 'C': [123, 234, 333]})
df2 = pd.DataFrame({'A': [1], 'dd': ['ss'], 'xc': [123]})

df3 = df1.loc[np.all(df1.values == df2.values, axis=1),:]
或:



除了Sandeep的回答之外,您还可以:

df1[np.all(df1.values == df2.values,1)].any().any()
用于获取布尔值

或者另一种方式:

df1[(df2.values==df1.values).all(1)].any().any()
或:

注意:两个输出均
True

检查特定列(与Sandeep相同):


除了Sandeep的回答之外,您还可以:

df1[np.all(df1.values == df2.values,1)].any().any()
用于获取布尔值

或者另一种方式:

df1[(df2.values==df1.values).all(1)].any().any()
或:

注意:两个输出均
True

检查特定列(与Sandeep相同):

如何检查df1中该行df2是否匹配

您可以对齐列,然后检查
df1
df2
中唯一一行的相等性:

df2.columns = df1.columns

res = (df1 == df2.iloc[0]).all(1).any()  # True
此解决方案的好处是,您不需要子集
df1
(昂贵),而是构建一个布尔数据帧/数组(便宜),并检查至少一行中的所有值是否为
True

这仍然不是特别有效,因为您正在考虑
df1
中的每一行,而不是在满足条件时停止。特别是对于数字数据,有更有效的解决方案

如何检查df1中该行df2是否匹配

您可以对齐列,然后检查
df1
df2
中唯一一行的相等性:

df2.columns = df1.columns

res = (df1 == df2.iloc[0]).all(1).any()  # True
此解决方案的好处是,您不需要子集
df1
(昂贵),而是构建一个布尔数据帧/数组(便宜),并检查至少一行中的所有值是否为
True


这仍然不是特别有效,因为您正在考虑
df1
中的每一行,而不是在满足条件时停止。特别是对于数字数据,有更有效的解决方案。

如果我只需要检查df2和df1中的特定列,该怎么办?像只检查df2中的dd、xc和df1的B、C一样?
ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
@qwww能否粘贴出现错误的代码段。另外,请检查语句是否完全相同。不要使用isin,因为它与索引名匹配,请尝试在第二个数据帧中更改索引名,但失败…@jezrael是的,谢谢您的建议。如果我只需要检查df2和df1中的特定列,该怎么办?像只检查df2中的dd、xc和df1的B、C一样?
ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
@qwww能否粘贴出现错误的代码段。另外,检查语句是否完全相同。不要使用isin,因为它与索引名匹配,尝试在第二个数据帧中更改索引名,但失败了…@jezrael是的,谢谢你的建议。如果列号不相同怎么办?@qwww,那么你有一个新问题:)。说真的,我假设你的问题中有
df1
df2
。无法自动对齐列。熊猫怎么知道
xc
映射到
C
?如果列号不一样怎么办?@qwww,那么你有一个新问题:)。说真的,我假设你的问题中有
df1
df2
。无法自动对齐列。熊猫如何知道
xc
映射到
C
df1[col].isin(df2[col]).any()
df2.columns = df1.columns

res = (df1 == df2.iloc[0]).all(1).any()  # True