我有一個資料框,每個人都有一個唯一的 ID、他們的姓名、街道、電子郵件和日期。資料框可能包含空格和不同的字符,如下例所示:
ID Name Street Email Date
1 Paulo street #1 [email protected] 2001-01-20
1 Paulo street #1 [email protected] 20-Jan
1 Paulo street #1 [email protected] 2001-01-20
2 Maria street #2 [email protected] 2020-01-01
2 Mari street #2 [email protected] 2020-01-01
3 Peter xx
4 Josh street #4 [email protected]
4 Josh street #4 [email protected]
我需要一種方法來過濾此資料框,方法是查找在“ID”列中重復的 ID,并回傳在任何其他列中具有任何不同值的所有行。如果發生這種情況,請回傳具有相同 ID 的所有行,從而產生以下資料幀:
ID Name Street Email Date
1 Paulo street #1 [email protected] 2001-01-20
1 Paulo street #1 [email protected] 20-Jan
1 Paulo street #1 [email protected] 2001-01-20
2 Maria street #2 [email protected] 2020-01-01
2 Mari street #2 [email protected] 2020-01-01
什么是最好的解決方案?謝謝您的幫助!
uj5u.com熱心網友回復:
用于所有列,如果對任何列都更大,則過濾DataFrameGroupBy.nunique,最后通過以下方式洗掉所有列的重復項:GroupBy.transform1DataFrame.drop_duplicates
df = df[df.groupby('ID').transform('nunique').gt(1).any(axis=1)].drop_duplicates()
print (df)
ID Name Street Email Date
0 1 Paulo street #1 [email protected] 2001-01-20
1 1 Paulo street #1 [email protected] 20-Jan
3 2 Maria street #2 [email protected] 2020-01-01
4 2 Mari street #2 [email protected] 2020-01-01
uj5u.com熱心網友回復:
您可以使用nunique來計算不同的元素,以便不會回傳 id 4:
df = df.groupby('ID').filter(
lambda x: x['ID'].count() > 1 and (
x['Name'].nunique() > 1
or x['Street'].nunique() > 1
or x['Email'].nunique() > 1
or x['Date'].nunique() > 1
))
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/504829.html
上一篇:從Formdata物件轉換為javascript陣列
下一篇:按多個欄位對物件陣列進行排序
