我有一個大熊貓資料框,它有兩列。一列是專案的唯一代碼,第二列包含該專案的名稱。
例如,假設“ID”具有動物的唯一代碼,“名稱”具有該動物的名稱。
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog']})
ID Name
0 AA Ape
1 BB Bull
2 CC Chimp
3 DD Dog
4 EE Dog
當我運行下面的代碼時,我會得到錯誤,因為 ID 列中的唯一項比名稱列中的多一個
len(df['Code'].unique()) == len(df['Name'].unique())
我的問題是如何找出兩個代碼代表哪種動物。理想情況下,我希望最終得到一個具有以下內容的資料框:
ID Name
3 DD Dog
4 EE Dog
但只要我能識別出不止一個 ID 所代表的動物,我就會對獲得所需結果的任何解決方案感到滿意。
謝謝
編輯:
資料框包含重復的行,因此類似于實際問題的更現實的示例是如下所示的資料框:
ID Name
0 AA Ape
1 BB Bull
2 CC Chimp
3 DD Dog
4 EE Dog
5 CC Chimp
6 AA Ape
7 DD Dog
8 FF Frog
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE', 'CC', 'AA', 'DD', 'FF'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog', 'Chimp', 'Ape', 'Dog', 'Frog']})
期望的輸出仍然是查找哪個ID已與兩個不同的動物名稱匹配
ID Name
3 DD Dog
4 EE Dog
uj5u.com熱心網友回復:
對于像第二個示例(包含重復行)這樣的資料框,帶有一個稍微增強的示例
import pandas as pd
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE', 'CC', 'AA', 'DD', 'FF', 'AA'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog', 'Chimp', 'Ape', 'Dog', 'Frog','Bull']})
# ID Name
# 0 AA Ape
# 1 BB Bull
# 2 CC Chimp
# 3 DD Dog
# 4 EE Dog
# 5 CC Chimp
# 6 AA Ape
# 7 DD Dog
# 8 FF Frog
# 9 AA Bull
我們可以使用以下內容。對結果進行排序,以便更容易按Name識別ID。
df.groupby('Name').filter(lambda x: x['ID'].nunique() > 1).drop_duplicates(subset=['ID','Name']).sort_values('Name')
輸出
ID Name
1 BB Bull
9 AA Bull
3 DD Dog
4 EE Dog
對于具有唯一行的資料框@ShubhamSharma 的答案要快得多。
uj5u.com熱心網友回復:
用于groupby.filter過濾哪些名稱組的ID計數大于或等于 2。
>>> df.groupby('Name').filter(lambda s: s['ID'].count() >= 2)
ID Name
3 DD Dog
4 EE Dog
uj5u.com熱心網友回復:
如果該列ID始終包含唯一值,那么您可以簡單地使用:
df[df.duplicated('Name', keep=False)]
ID Name
3 DD Dog
4 EE Dog
uj5u.com熱心網友回復:
您可以按值計數分組
df.Name.value_counts()
Dog 2
Ape 1
Bull 1
Chimp 1
Name: Name, dtype: int64
uj5u.com熱心網友回復:
Name如果您只想要 a有多個的所有行,ID您可以使用:
df.groupby(['Name']).filter(lambda count: len(count) > 1)
uj5u.com熱心網友回復:
aaa = df['Name'].value_counts()
m = aaa >= 2
index = aaa[m].index[0]
print(df[df['Name'] == index])
輸出
ID Name
3 DD Dog
4 EE Dog
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486550.html
