[英]How to create a dataframe that only selects rows that have value more than avg +/* standard deviation in Pandas?
[英]How to only keep rows which have more than one value in a pandas DataFrame?
我經常嘗試進行以下操作,但有一個在熊貓中效率最高的即時解決方案:
我有以下示例pandas DataFrame,其中有兩列, Name
和Age
:
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.