我的数据框如下:
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
我找不到为大型数据帧执行此操作的有效方法。非常感谢任何帮助!
答案 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