簡體   English   中英

如何只保留pandas DataFrame中具有多個值的行?

[英]How to only keep rows which have more than one value in a pandas DataFrame?

我經常嘗試進行以下操作,但有一個在熊貓中效率最高的即時解決方案:

我有以下示例pandas DataFrame,其中有兩列, NameAge

import pandas as pd

data = [['Alex',10],['Bob',12],['Barbara',25], ['Bob',72], ['Clarke',13], ['Clarke',13], ['Destiny', 45]]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)

print(df)
      Name   Age
0     Alex  10.0
1      Bob  12.0
2  Barbara  25.0
3      Bob  72.0
4   Clarke  13.0
5   Clarke  13.0
6  Destiny  45.0

我想刪除Name具有匹配值的所有行。 在示例df ,有兩個Bob值和兩個Clarke值。 因此,預期的輸出是:

      Name   Age
0      Bob  12.0
1      Bob  72.0
2   Clarke  13.0
3   Clarke  13.0

我假設有一個重置索引。

一種選擇是在列表中保留Name所有唯一值,然后遍歷數據幀以檢查重復行。 那將是非常低效的。

這個任務有內置函數嗎?

使用drop_duplicates ,只獲取被刪除的內容:

print(df[~df['Name'].isin(df['Name'].drop_duplicates(False))])

輸出:

     Name   Age
1     Bob  12.0
3     Bob  72.0
4  Clarke  13.0
5  Clarke  13.0

如果關心索引,請執行以下操作:

print(df[~df['Name'].isin(df['Name'].drop_duplicates(False))].reset_index(drop=1))

輸出:

     Name   Age
0     Bob  12.0
1     Bob  72.0
2  Clarke  13.0
3  Clarke  13.0

使用duplicated

df[df.Name.duplicated(keep=False)]
     Name   Age
1     Bob  12.0
3     Bob  72.0
4  Clarke  13.0
5  Clarke  13.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM