- -大家好!Python 的 Pandas 的新學生在這里。
我有一個我在這里人工構建的資料框:https : //i.stack.imgur.com/cWgiB.png。我想指出在 (1,1) 和 (3,3) 處有重復的 55 值
我想提取任何值(int、float、str 等)的索引和列,尤其是可能不唯一的值。在這種情況下,該值為 int(55)。我該怎么做?
我玩過.columns, .index, .loc,但似乎無法得到答案。我得到的最遠的是用df.values == 55or創建一個布爾資料框df == 55,但似乎不能用它做任何事情。
我得到的另一種“最遠”方法是使用df.unstack.idxmax(),它會回傳列和標題的元組,但有兩個主要問題:
- 僅根據
.idxmax(),.idxmin()函式回傳最大值/最小值 - 只回傳與我的值匹配的第一個列/索引,如果有重復則無濟于事
我知道我可以for loop遍歷整個資料框,跟蹤我在臨時變數中所在的列和索引。一旦找到我要查找的值,我將break回傳當前列和索引。只是希望有一種不那么暴力的方法。
謝謝。
uj5u.com熱心網友回復:
pandas 中有一個函式可以給出重復的行。
duplicate = df[df.duplicated()]
print(duplicate)
uj5u.com熱心網友回復:
使用DataFrame.unstackforSeries with MultiIndex然后通過Series.duplicatedwith過濾重復項keep=False:
s = df.unstack()
out = s[s.duplicated(keep=False)].index.tolist()
如果需要也與值重復:
df1 = (s[s.duplicated(keep=False)]
.sort_values()
.rename_axis(index='idx', columns='cols')
.reset_index(name='val'))
如果需要Series.eq( ==) tet 特定值更改掩碼:
s = df.unstack()
out = s[s.eq(55)].index.tolist()
uj5u.com熱心網友回復:
所以,在下面的代碼中,有一個迭代。但是,它不會遍歷整個 DataFrame,而只是遍歷列,然后用于.any()檢查是否存在任何 desierd 值。然后loc在 Pandas 中使用feature 來定位值,最后回傳index.
wanted_value = 55
for col in list(df.columns):
if df[col].eq(wanted_value).any() == True:
print("row:", *list(df.loc[df[col].eq(wanted_value)].index), ' col', col)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326420.html
