[英]Drop rows entries if a column values are all equal in grouped subset
我有這個例子 df:
info = {'name': ['Jason', 'Jason', 'Jason', 'Jason','Molly', 'Molly', 'Molly', 'Molly','Nicky', 'Nicky', 'Nicky', 'Nicky'],
'city': ['Las Vegas', 'New York', 'Dallas', 'Los Angeles','Las Vegas', 'New York', 'Dallas', 'Los Angeles','Las Vegas', 'New York', 'Dallas', 'Los Angeles'],
'Visits' :[2,2,2,2,1,3,4,1,2,8,2,8]}
df = pd.DataFrame(data=info)
df
給出:
name city Visits
0 Jason Las Vegas 2
1 Jason New York 2
2 Jason Dallas 2
3 Jason Los Angeles 2
4 Molly Las Vegas 1
5 Molly New York 3
6 Molly Dallas 4
7 Molly Los Angeles 1
8 Nicky Las Vegas 2
9 Nicky New York 8
10 Nicky Dallas 2
11 Nicky Los Angeles 8
如果Visits
下的所有值都相等,我想從names
中刪除條目,這在df['name']== jason
的情況下是正確的。 我使用了兩個子集name and Visits
的 drop_duplicates,但 output 也刪除了其他名稱下的其他重復值。
df.drop_duplicates(['name','Visits'], keep=False)
這給出:
name city Visits
5 Molly New York 3
6 Molly Dallas 4
output 應該是:
4 Molly Las Vegas 1
5 Molly New York 3
6 Molly Dallas 4
7 Molly Los Angeles 1
8 Nicky Las Vegas 2
9 Nicky New York 8
10 Nicky Dallas 2
11 Nicky Los Angeles 8
實現這一目標的最佳方法是什么?
使用nunique
:
df = df[df.groupby('name')['Visits'].transform('nunique').ne(1)]
或者
df = df.groupby('name').filter(lambda x: x['Visits'].nunique() != 1)
Output:
>>> df
name city Visits
4 Molly Las Vegas 1
5 Molly New York 3
6 Molly Dallas 4
7 Molly Los Angeles 1
8 Nicky Las Vegas 2
9 Nicky New York 8
10 Nicky Dallas 2
11 Nicky Los Angeles 8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.