删除置换多索引

时间:2018-05-07 23:39:06

标签: python pandas dataframe filtering multi-index

我的数据框如下:

           Correlations       adf
FITB RF        0.984395 -5.484766
WAT  SWK       0.981778 -5.465284
SWK  WAT       0.981778 -5.420976
RF   FITB      0.984395 -5.175268
MCO  BK        0.973801 -4.919812

我希望过滤索引,以便数据框丢弃任何重复的值,即使它们是置换的。因此,上述数据框将成为

           Correlations       adf
FITB RF        0.984395 -5.484766
WAT  SWK       0.981778 -5.465284
MCO  BK        0.973801 -4.919812

我找不到为大型数据帧执行此操作的有效方法。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

您可以利用pd.DataFrame.duplicated + m = pd.DataFrame(np.sort(df.index.tolist(), axis=1)).duplicated() df[~(m.values)] Correlations adf FITB RF 0.984395 -5.484766 WAT SWK 0.981778 -5.465284 MCO BK 0.973801 -4.919812

pd.MultiIndex.duplicated

或者,以类似的方式,使用m = pd.MultiIndex.from_tuples( [tuple(x) for x in np.sort(df.index.tolist(), axis=1)] ).duplicated() df[~m] Correlations adf FITB RF 0.984395 -5.484766 WAT SWK 0.981778 -5.465284 MCO BK 0.973801 -4.919812

ele = driver.findElement(webdriver.By.xpath("//*[@class='classname']"));
driver.executeScript("arguments[0].setAttribute('style','display:block')", ele);

答案 1 :(得分:2)

您可以使用sorted + duplicated

df[~pd.DataFrame(list(map(sorted,df.index.values))).duplicated().values]
          Correlations       adf
FITB RF       0.984395 -5.484766
WAT  SWK      0.981778 -5.465284
MCO  BK       0.973801 -4.919812

答案 2 :(得分:1)

可以使用以下函数对索引进行标准化:

def normalizeIndex(x):
    splittedString = list(filter(None, x.split(" ")))#split the input string into token with blank space separator and remove empty results
    splittedString.sort()#sort the token list
    return " ".join(splittedString) #return normalized string concatenating ordered token list

在将索引上的df分组并选择第一次出现之前,该函数可以应用于索引(无论如何可以应用其他分组选项):

    df = pd.DataFrame({'Correlations': [0.984395, 0.981778,0.981778,0.984395,0.973801,],
                   'adf':[-5.484766,-5.465284,-5.420976,-5.175268,-4.919812]},

                  index=['FITB RF','WAT  SWK','SWK  WAT','RF   FITB','MCO  BK',])

    df.index = df.index.map(lambda x: normalizeIndex(x)) #Apply reordering function to df index
    df = df.groupby(df.index).first() #Group the resulting dataframe, by index and, take the first occurence
    print(df)

出:

         Correlations       adf
BK MCO       0.973801 -4.919812
FITB RF      0.984395 -5.484766
SWK WAT      0.981778 -5.465284