Python pandas multiIndex检查索引值

问题描述 投票:0回答:1

我正在尝试使用由帧中的3列组成的公共键/索引值来比较两个DataFrame的差异。

例如假设两个列均是:“ COL1”,“ COL2”,“ COL3”,“ COL4”

数据帧是df1和df2,使用“ read_csv”方法获得。

然后我在两个上都使用了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)

然后我要遍历df1 dataFrame,并检查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

testData2.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
python pandas dataframe multi-index
1个回答
0
投票

如果要通过比较列df1来查找df2中而不是"COL1","COL2","COL3"中的行,则可以执行以下操作

左加入df1 and df2

df3 = df1.merge(df2, how='left', on=["COL1","COL2","COL3"])

查找具有NaN的行

df3[df3.isnull().any(1)]
© www.soinside.com 2019 - 2024. All rights reserved.