首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除值的频率小于5的行?Python,Pandas

如何删除值的频率小于5的行?Python,Pandas
EN

Stack Overflow用户
提问于 2018-01-30 04:24:40
回答 6查看 12.2K关注 0票数 4

我有一张有很多行的数据。有时价值观是其中之一,对我的目的没有多大用处。

如何删除列2和3的值不超过5次的所有行?

df输入

代码语言:javascript
复制
 Col1     Col2     Col3       Col4
 1        apple    tomato     banana
 1        apple    potato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        grape    tomato     banana
 1        pear     tomato     banana
 1        lemon    tomato     banana

输出

代码语言:javascript
复制
 Col1     Col2     Col3       Col4
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-01-30 05:15:29

全球计数

使用stack + value_counts + replace -

代码语言:javascript
复制
v = df[['Col2', 'Col3']]
df[v.replace(v.stack().value_counts()).gt(5).all(1)]

   Col1   Col2    Col3    Col4
0     1  apple  tomato  banana
2     1  apple  tomato  banana
3     1  apple  tomato  banana
4     1  apple  tomato  banana
5     1  apple  tomato  banana

(最新情况)

按列计数

在感兴趣的列上使用pd.Series.value_counts调用pd.Series.value_counts,并以与以前相同的方式进行过滤-

代码语言:javascript
复制
v = df[['Col2', 'Col3']]
df[v.replace(v.apply(pd.Series.value_counts)).gt(5).all(1)]

   Col1   Col2    Col3    Col4
0     1  apple  tomato  banana
2     1  apple  tomato  banana
3     1  apple  tomato  banana
4     1  apple  tomato  banana
5     1  apple  tomato  banana

详细信息

使用value_counts计算数据中的值-

代码语言:javascript
复制
c = v.apply(pd.Series.value_counts)
c

        Col2  Col3
apple    6.0   NaN
grape    1.0   NaN
lemon    1.0   NaN
pear     1.0   NaN
potato   NaN   1.0
tomato   NaN   8.0

调用replace,用其计数替换DataFrame中的值-

代码语言:javascript
复制
i = v.replace(c)
i

   Col2  Col3
0     6     8
1     6     1
2     6     8
3     6     8
4     6     8
5     6     8
6     1     8
7     1     8
8     1     8

从那时起,

代码语言:javascript
复制
m = i.gt(5).all(1)

0     True
1    False
2     True
3     True
4     True
5     True
6    False
7    False
8    False
dtype: bool

使用掩码对df进行索引。

票数 6
EN

Stack Overflow用户

发布于 2018-01-30 05:16:56

易用变换法

代码语言:javascript
复制
counts_col2 = df.groupby("Col2")["Col2"].transform(len)
counts_col3 = df.groupby("Col3")["Col3"].transform(len)

mask = (counts_col2 > 5) & (counts_col3 > 5)

df[mask]

产出:

代码语言:javascript
复制
   Col1   Col2    Col3    Col4
0     1  apple  tomato  banana
2     1  apple  tomato  banana
3     1  apple  tomato  banana
4     1  apple  tomato  banana
5     1  apple  tomato  banana
票数 5
EN

Stack Overflow用户

发布于 2018-01-30 05:02:15

创建示例数据框架

代码语言:javascript
复制
import pandas as pd

text = '''Col1     Col2     Col3       Col4
 1        apple    tomato     banana
 1        apple    potato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        apple    tomato     banana
 1        grape    tomato     banana
 1        pear     tomato     banana
 1        lemon    tomato     banana'''

count = 1
data = []
for line in text.split('\n'):
    if count == 1:
        headers = line.split()
    else:
        data.append(line.split())
    count += 1

df = pd.DataFrame(data = data,columns=headers)

value_counts方法生成一个dict,以唯一的列值作为键,计数作为值。这些钥匙是我分配给k的。

  • value_counts返回一个Pandas系列对象,但它就像一个小块

此列表理解有一个筛选' if‘语句,如果与其关联的值不>5,则忽略键

在本例中,它返回一个只有一个值的列表,但在其他情况下它可能更多。

代码语言:javascript
复制
Col2_more_than_5 = [k for k in df['Col2'].value_counts().keys() 
if df['Col2'].value_counts()[k] > 5]

Col3_more_than_5 = [k for k in df['Col3'].value_counts().keys() 
if df['Col3'].value_counts()[k] > 5]

现在我有两个列表,其中包含每个列中出现的字符串/s>5次,现在我创建了一个选择器,它返回两个语句都为真的行。

代码语言:javascript
复制
df[(df['Col2'].isin(Col2_more_than_5)) & (df['Col3'].isin(Col3_more_than_5))]

如果列表中有多于一个值,则“isin”方法可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48513886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档