Python pandas multiIndex检查索引值

时间:2019-12-16 11:13:25

标签: python pandas dataframe multi-index

我正在尝试使用由帧中的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

1 个答案:

答案 0 :(得分: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)]

查找两个df1 and df2中的行

df3.dropna()