相关疑难解决方法(0)

pandas:使用运算符链接过滤DataFrame行

在大部分操作pandas可以与运营商链接(来完成groupby,aggregate,apply,等),但我发现过滤行的唯一方法是通过正常的托架索引

df_filtered = df[df['column'] == value]
Run Code Online (Sandbox Code Playgroud)

这是没有吸引力的,因为它需要df在能够过滤其值之前分配给变量.有更像以下的东西吗?

df_filtered = df.mask(lambda x: x['column'] == value)
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

293
推荐指数
9
解决办法
48万
查看次数

将多个过滤器应用于pandas DataFrame或Series的有效方法

我有一个场景,用户想要将几个过滤器应用于Pandas DataFrame或Series对象.本质上,我想有效地将​​一堆过滤(比较操作)链接在一起,这些过滤由用户在运行时指定.

过滤器应该是添加剂(也就是应用的每个应该是狭窄的结果).

我目前正在使用,reindex()但每次创建一个新对象并复制基础数据(如果我正确理解文档).因此,在过滤大型系列或DataFrame时,这可能非常低效.

我认为使用apply(),map()或类似的东西可能会更好.我对Pandas很陌生,尽管如此仍然试图将我的头脑包裹起来.

TL; DR

我想获取以下表单的字典,并将每个操作应用于给定的Series对象并返回"已过滤"的Series对象.

relops = {'>=': [1], '<=': [1]}
Run Code Online (Sandbox Code Playgroud)

很长的例子

我将从一个当前的例子开始,只是过滤一个Series对象.以下是我目前使用的功能:

   def apply_relops(series, relops):
        """
        Pass dictionary of relational operators to perform on given series object
        """
        for op, vals in relops.iteritems():
            op_func = ops[op]
            for val in vals:
                filtered = op_func(series, val)
                series = series.reindex(series[filtered])
        return series
Run Code Online (Sandbox Code Playgroud)

用户提供包含他们想要执行的操作的字典:

>>> df = pandas.DataFrame({'col1': [0, 1, 2], 'col2': [10, 11, 12]})
>>> print df
>>> print df
   col1  col2
0 …
Run Code Online (Sandbox Code Playgroud)

python algorithm pandas

121
推荐指数
5
解决办法
20万
查看次数

标签 统计

pandas ×2

python ×2

algorithm ×1

dataframe ×1