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

Python支持多索引检查索引值

俞子实
2023-03-14

我试图比较两个数据帧的差异,使用一个公共键/索引值,该值由帧中的3列组成。

e、 g.假设两列中的列都是:“COL1”、“COL2”、“COL3”、“COL4”

数据帧是df1

然后,我使用了set_index方法:

df1.set_index(["COL1","COL2","COL3"],inplace=True);
df1.sort_index(inplace=True)

df2.set_index(["COL1","COL2","COL3"],inplace=True);
df2.sort_index(inplace=True)

然后我想html" target="_blank">遍历df1数据帧,并检查df2数据帧是否有匹配的索引。我尝试过使用以下方法:

for idx, df_select in df1.groupby(level=[0,1,2]):
    boolDf = df2.isin(idx).all();

但是它返回false(尽管我可以通过打印看到两者的索引都存在)。

我做错了什么?

另外,如何使用第一个数据帧的索引从第二个数据帧获取“loc”行?

提前谢谢!

编辑:示例数据。

testData1。csv包含:TESTVAL1、TESTVAL2、TESTVAL3、firstCsvVal

测试数据2。csv包含:TESTVAL1、TESTVAL2、TESTVAL3、secondCsvVal

代码:

import pandas as pd

firstFile = "P:\\Documents\\Python\\testData1.csv"
secondFile = "P:\\Documents\\Python\\testData2.csv"

columnNames  =["COL1","COL2","COL3","COL4"]
firstData = pd.read_csv(firstFile,names=columnNames)
secondData = pd.read_csv(secondFile,names=columnNames)

firstData.set_index(["COL1","COL2","COL3"],inplace=True)
firstData.sort_index(inplace=True)

secondData.set_index(["COL1","COL2","COL3"],inplace=True)
secondData.sort_index(inplace=True)

print(firstData)
print(secondData)

for idx, df_select in firstData.groupby(level=[0,1,2]):
    boolDf = secondData.isin(idx).all()
    print(idx,boolDf)

结果:

                                   COL4
COL1     COL2     COL3
TESTVAL1 TESTVAL2 TESTVAL3  firstCsvVal
                                    COL4
COL1     COL2     COL3
TESTVAL1 TESTVAL2 TESTVAL3  secondCsvVal
('TESTVAL1', 'TESTVAL2', 'TESTVAL3') COL4    False
dtype: bool

共有1个答案

终安和
2023-03-14

如果要通过比较列“COL1”、“COL2”、“COL3”来查找位于df1但不在df2中的行,可以执行以下操作

df3 = df1.merge(df2, how='left', on=["COL1","COL2","COL3"])
df3[df3.isnull().any(1)]
df3.dropna()
 类似资料:
  • 我已经达到了magic dex的极限,因为我的应用程序使用了很多JAR(驱动API、greendao、文本到pdf、支持…)。 我目前的解决方案是,我只为google drive创建了第二个apk,我从主apk调用了它。但现在我发现android终于通过这个库支持了这一点。我的问题是我不知道如何实现它(最好没有gradle)。我找不到任何好的教程。 好吧,我正在失去理智,试图实现这个...我找到了

  • 问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答

  • 问题内容: 当我运行该函数时,它会引发以下错误,这是为什么呢? 问题答案: 显然,您正在传递给函数。可能是用python2.x编写的(返回列表时)。使用python3.x时,返回一个行为更像a而不是a的对象。因此,无法对其进行索引。 解决方案是将(或简单地)传递给。

  • 问题内容: 我有这个查询: 我收到以下错误: some_id是一个整数,但我想选择具有some_id = 1的指标(或任何我决定放入变量的#)。 问题答案: 这会将参数转换为可索引的列表。假设您的方法像我想的那样工作,这应该工作。 发生错误是因为该方法中的某个地方,它可能试图遍历该输入或直接对其进行索引。可能是这样的: 通过使其成为列表(或可迭代的),您就可以像这样将其索引到第一个元素中。 您还可

  • 现在,我要检索一个值: Q1:在[3.3,6.6]范围内-预期返回值:[3.3,5.5,6.6]或[3.3,3.3,5.5,6.6](包括最后一个),如果没有,则为[3.3,5.5]或[3.3,3.3,5.5]。 Q2:在[2.0,4.0]范围内-预期返回值:[3.3]或[3.3,3.3] 对于任何其他多索引维度都是相同的,例如B值: Q3:在范围[111,500]中有重复,作为范围中的数据行数-

  • 我试图通过Python在Elasticsearch中创建一个索引。我部署了一个ES的本地实例,查询运行良好。但是,我有一个模式。这里是: 下面是我用来创建这个索引的代码