簡體   English   中英

使用pandas / python在數據框中出現列值小於某個數字時刪除行?

[英]Remove rows when the occurrence of a column value in the data frame is less than a certain number using pandas/python?

我有一個這樣的數據框:

df
col1    col2
A         1
B         1
C         2
D         3
D         2
B         1
D         5

我已經看到,在數據框中,帶有B和D的col1值出現的次數超過一次。

我希望將這些值保留為多於一個,最終的數據框將如下所示:

col1     col2
 B         1
 D         3
 D         2
 B         1
 D         5

如何使用pandas / python以最有效的方式執行此操作?

您可以使用duplicated設置keep=False ,它將為col1所有重復值返回True ,然后在數據幀上使用boolean indexation:

df[df.col1.duplicated(keep=False)]

   col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

更新

要保持col1發生的次數超過thr次數,請使用:

thr = 2
df[df.col1.duplicated(keep=False).groupby(df.col1).transform('sum').gt(thr)]

   col1  col2
3    D     3
4    D     2
6    D     5

使用DataFrame.duplicated ,為搜索對象指定列col1 ,使用keep=False ,返回所有dupe行的True ,最后按boolean indexing過濾:

df = df[df.duplicated('col1', keep=False)]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

如果需要指定閾值使用transform size和過濾器相同的方式像第一個解決方案:

df = df[df.groupby('col1')['col1'].transform('size') > 1]
print (df)
  col1  col2
1    B     1
3    D     3
4    D     2
5    B     1
6    D     5

使用value_countsmap替代解決方案:

df = df[df['col1'].map(df['col1'].value_counts()) > 1]

如果性能不重要,請使用DataFrameGroupBy.filter

df = df.groupby('col1').filter(lambda x: len(x) > 1)

暫無
暫無

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

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