首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据“全真实”标准

熊猫数据“全真实”标准
EN

Stack Overflow用户
提问于 2016-10-27 19:10:53
回答 1查看 395关注 0票数 1

Python 2.7,Pandas 0.18。

我有一个DataFrame,还有一些方法可以通过一个条件参数来选择行的子集。我想知道一种更惯用的方法来编写与所有行匹配的条件。

下面是一个非常简单的例子:

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

def apply_to_matching(df,criterion):
   df.loc[criterion,'A'] = df[criterion]['A']*df[criterion]['B']

df = pd.DataFrame({'A':[1,2,3,4],'B':[10,100,1000,10000]})

criterion = (df['A']<3)
result = apply_to_matching(df,criterion)
print df

产出如下:

代码语言:javascript
复制
     A      B
0   10     10
1  200    100
2    3   1000
3    4  10000

因为该标准只适用于前两行。

我想知道创建选择DataFrame所有行的标准的惯用方法。

这可以通过向DataFrame中添加所有真值的列来实现:

代码语言:javascript
复制
# Add a column
df['AllTrue']=True
criterion = df['AllTrue']
result = apply_to_matching(df,criterion)
print df.drop('AllTrue',axis=1)

产出如下:

代码语言:javascript
复制
       A      B
0     10     10
1    200    100
2   3000   1000
3  40000  10000

但是这种方法在我的DataFrame中增加了一列,我必须稍后过滤掉它,这样才不会在输出中得到它。

那么,在Pandas中有没有一种更地道的方法来做到这一点呢?它不要求我知道任何关于列名的信息,也不需要更改DataFrame?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 17:01:31

当一切都应该是真时,布尔索引方法将需要一系列的True。使用上面的代码,另一种看待它的方法是,criterion参数也可以接收切片。获取所有行将意味着像这个df.loc[:, 'A']那样对整个行进行切片。当您需要将它作为参数传递给apply_to_matching函数时,请使用slice内置:

代码语言:javascript
复制
apply_to_matching(df, slice(None, None))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40292466

复制
相关文章

相似问题

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