Python 基于行中值的频率过滤数据帧

Python 基于行中值的频率过滤数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我已经回顾了许多与我类似的问题,但我还没有找到一个明确的解决方案(如果这是一个重复的问题或这样的问题已经得到了回答,如果你能链接到一个答案,我会很高兴) 我有一个如下所示的数据帧: col_0 | col_1 | col_2 | col_3 | col_4 | col_5 --------------------------------------------- 0.2 1 1 1 1 1 0.3 0.4 1

我已经回顾了许多与我类似的问题,但我还没有找到一个明确的解决方案(如果这是一个重复的问题或这样的问题已经得到了回答,如果你能链接到一个答案,我会很高兴)

我有一个如下所示的数据帧:

col_0 | col_1 | col_2 | col_3 | col_4 | col_5
---------------------------------------------
  0.2     1       1       1       1       1
  0.3    0.4      1       1       1       1
  0.1     1      0.3      1       1       1    
我只是想过滤掉/排除
1
的频率超过阈值(通常是基于条件的频率/计数)的行,比如这里的
4
。因此,我希望输出中的数据帧如下所示:

col_0 | col_1 | col_2 | col_3 | col_4 | col_5
---------------------------------------------
  0.3    0.4      1       1       1       1
  0.1     1      0.3      1       1       1    
所以我的关键问题是:如何根据数据帧中特定值的频率/计数排除数据帧中的行。理想情况下,我希望在一行中指定一个列范围,例如列索引0到4的值的频率(不基于列名),我认为后者没有那么大的挑战性。

这有效吗

df.loc[(df==1).sum(axis=1).between(0,4),:]
您可以使用:

df[df.eq(1).sum(axis=1).le(4)]

   col_0  col_1  col_2  col_3  col_4  col_5
1    0.3    0.4    1.0      1      1      1
2    0.1    1.0    0.3      1      1      1

也许不是最快的方式,但可能很容易看到发生了什么:

import pandas as pd

d = {'col_0' : [ 0.2, 0.3, 0.1], 
'col_1' : [ 1, 0.4, 1], 
'col_2' : [ 1, 1, 0.3], 
'col_3' : [ 1, 1, 1], 
'col_4' : [ 1, 1, 1], 
'col_5' : [ 1, 1, 1]}

df = pd.DataFrame(d)
def apply_freq_filter(df, value, frequency, col_start, col_end):
    f = df.iloc[:,col_start:col_end+1].apply(pd.value_counts, axis=1)
    f = f[value] <= frequency
    return df[f]

df = apply_freq_filter(df, 1, 4, 0, 5)
print(df)
将熊猫作为pd导入
d={'col_0':[0.2,0.3,0.1],
“col_1”:[1,0.4,1],
“col_2”:[1,1,0.3],
“col_3”:[1,1,1],
“col_4”:[1,1,1],
“col_5”:[1,1,1]}
df=pd.数据帧(d)
def应用频率过滤器(df、值、频率、列开始、列结束):
f=df.iloc[:,列开始:列结束+1]。应用(pd.value\u计数,轴=1)

f=f[value]我认为这在语法上是不正确的:
类“bool”的未解析属性引用“sum”
为什么在
之间使用
而不是
le
?@Pedram语法正确,我已经测试过了。你没有给出答案,这个问题与你在报告中列出的问题无关problem@roganjosh例如,数据帧({'a':[1,0.2,1,1],'b':[1,0.2,0.3,0.4],'c':[1,1,0.5,0.6]})不是一个很大的努力,在你的问题中包括,这种方法确实有效。如果你不给我们工具来构建一个有代表性的DF,如果答案不是即插即用的,不要感到惊讶。我认为这比现有的两个答案可读性差得多,但我认为主要是因为它比其他答案更具普遍性。如果将开始列、结束列、变量值和频率包含到其他解决方案中,可能会变得更难阅读。但我明白了!我有点犹豫不决,因为我看到了可扩展性的观点,但我认为这与快速数据处理的前提是正交的,
apply
只是扔进了垃圾箱。其他方法仍然可以打包成一个函数:)