相关疑难解决方法(0)

将多个过滤器应用于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万
查看次数

使用pd.eval()在pandas中进行动态表达式评估

目标和动机

pd.eval并且eval是pandas API套件中功能强大但被低估的功能,它们的使用远未完全记录或理解.小心适量,eval并且engine可以极大地简化代码,提高性能,并成为创建动态工作流的强大工具.

这个规范QnA的目的是让用户更好地理解这些功能,讨论一些鲜为人知的功能,如何使用它们,以及如何最好地使用它们,以及清晰易懂的示例.这篇文章将讨论的两个主要议题是

  1. 了解parser,df2x在争论pd.eval,以及它们如何被用来计算表达式
  2. 了解之间的差eval,eval并且engine,当每个功能是合适的用于动态执行.

这篇文章不能替代文档(答案中的链接),所以请完成它!


我将以这样的方式构建一个问题,以便开启对所支持的各种功能的讨论parser.

给出两个DataFrame

np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))

df1
   A  B  C  D
0  5  0  3  3
1  7  9  3  5
2  2  4  7  6
3  8  8  1  6
4  7  7  8  1

df2
   A  B  C …
Run Code Online (Sandbox Code Playgroud)

python eval dataframe pandas

45
推荐指数
2
解决办法
7156
查看次数

熊猫:根据更复杂的标准选择和修改数据框

我正在看这个这个线程,虽然我的问题没有那么不同,但它有一些差异.我有一个数据帧floats,我想用字符串替换.说:

      A     B       C
 A    0     1.5     13
 B    0.5   100.2   7.3
 C    1.3   34      0.01
Run Code Online (Sandbox Code Playgroud)

对于这个表我想用几个标准替换,但只有第一个替换工作:

df[df<1]='N' # Works
df[(df>1)&(df<10)]#='L' # Doesn't work
df[(df>10)&(df<50)]='M'  # Doesn't work
df[df>50]='H'  # Doesn't work
Run Code Online (Sandbox Code Playgroud)

如果我改为基于第二行的选择float,仍然不起作用:

((df.applymap(type)==float) & (df<10) & (df>1)) #Doesn't work
Run Code Online (Sandbox Code Playgroud)

我想知道如何申请pd.DataFrame().mask这里,或任何其他方式.我该怎么解决这个问题?

或者,我知道我可以逐列阅读并在每个系列中应用替换,但这似乎有点适得其反

编辑:任何人都可以解释为什么上面的4个简单分配不起作用?

python pandas

10
推荐指数
3
解决办法
430
查看次数

从Pandas中的过滤结果创建bool掩码

我知道如何在查询单个列时创建一个掩码来过滤数据帧:

import pandas as pd
import datetime
index = pd.date_range('2013-1-1',periods=100,freq='30Min')
data = pd.DataFrame(data=list(range(100)), columns=['value'], index=index)
data['value2'] = 'A'
data['value2'].loc[0:10] = 'B'

data

    value   value2
2013-01-01 00:00:00 0   B
2013-01-01 00:30:00 1   B
2013-01-01 01:00:00 2   B
2013-01-01 01:30:00 3   B
2013-01-01 02:00:00 4   B
2013-01-01 02:30:00 5   B
2013-01-01 03:00:00 6   B
Run Code Online (Sandbox Code Playgroud)

我在这里使用一个简单的面具:

mask = data['value'] > 4
data[mask]
    value   value2
2013-01-01 02:30:00 5   B
2013-01-01 03:00:00 6   B
2013-01-01 03:30:00 7   B
2013-01-01 04:00:00 8   B
2013-01-01 04:30:00 9 …
Run Code Online (Sandbox Code Playgroud)

python pandas

8
推荐指数
1
解决办法
3万
查看次数

将pandas DataFrame行复制到多个其他行

简单实用的问题,但我找不到解决方案.

我看过的问题如下:

修改pandas数据帧中的行子集

一次更改pandas DataFrame的多个列中的某些值

使用pandas将列从一个DataFrame复制到另一个DataFrame的最快方法?

使用pandas.DataFrame中的复杂条件进行选择

这些与我之间的关键区别在于我不需要插入单个值,而是插入一行.

我的问题是,我拿起一行数据帧,比方说df1.因此我有一个系列.

现在我有了这个其他数据框,df2我根据标准选择了多行,我想将该系列复制到所有那些行.

DF1:

Index/Col   A   B  C
1           0   0  0
2           0   0  0
3           1   2  3
4           0   0  0
Run Code Online (Sandbox Code Playgroud)

DF2:

Index/Col   A   B  C
1           0   0  0
2           0   0  0
3           0   0  0
4           0   0  0
Run Code Online (Sandbox Code Playgroud)

我想要完成的是将df1 [3]插入到行df2 [2]和df3 [3]中.所以像非工作代码:

series = df1[3]
df2[df2.index>=2 and df2.index<=3] = series
Run Code Online (Sandbox Code Playgroud)

回国

DF2:

Index/Col   A   B  C
1           0   0  0
2           1 …
Run Code Online (Sandbox Code Playgroud)

python pandas

7
推荐指数
1
解决办法
1万
查看次数

熊猫定位多个条件

我有一个数据框,我想删除 A 列等于蓝色且列 B 等于绿色的所有行。

我虽然下面应该工作,但事实并非如此。

任何人都可以看到问题

df=df.loc[~(df['A']=='blue' & df['B']=='green')]
Run Code Online (Sandbox Code Playgroud)

loc pandas

2
推荐指数
2
解决办法
5969
查看次数

Pandas 中的多个条件

我正在使用的表

这是我正在使用的表

我需要使用 'Duration'>70 和 'End Terminal'==10 访问数据点因此我尝试过

kj[kj['Duration']>70] 
kj[kj['End Terminal'] == 10]
Run Code Online (Sandbox Code Playgroud)

上面的命令单独工作正常,但是当我将它们作为:

kj[kj['End Terminal'] == 10] & kj[kj['Duration']>70] 
Run Code Online (Sandbox Code Playgroud)

有一个错误,因此如何在 Pandas-Python 的一个语句中使用这两个条件

python pandas

1
推荐指数
1
解决办法
2665
查看次数

标签 统计

pandas ×7

python ×6

algorithm ×1

dataframe ×1

eval ×1

loc ×1