gpt4 book ai didi

python - 如何删除值频率小于 5 的行? python , Pandas

转载 作者:行者123 更新时间:2023-11-28 22:21:11 26 4
gpt4 key购买 nike

我有一个包含很多行的数据框。有时值(value)观是其中之一,对我的目的不是很有用。

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

df输入

 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

输出

 Col1     Col2     Col3       Col4
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana
1 apple tomato banana

最佳答案

全局计数
使用stack + value_counts + replace -

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 调用 apply,并以与之前相同的方式进行过滤 -

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 计算数据框中的值 -

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 中的值 -

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

从那时起,

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

关于python - 如何删除值频率小于 5 的行? python , Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com