熊猫数据框"所有真实"标准

时间:2016-10-27 19:10:54

标签: python pandas

Python 2.7,Pandas 0.18。

我有一个DataFrame,我有通过标准参数选择行子集的方法。我想知道一种更惯用的方式来编写一个匹配所有行的标准。

这是一个非常简单的例子:

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

输出结果为:

     A      B
0   10     10
1  200    100
2    3   1000
3    4  10000

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

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

这可以通过向DataFrame添加所有真值的列来完成:

# Add a column
df['AllTrue']=True
criterion = df['AllTrue']
result = apply_to_matching(df,criterion)
print df.drop('AllTrue',axis=1)

输出结果为:

       A      B
0     10     10
1    200    100
2   3000   1000
3  40000  10000

但是这种方法会在我的DataFrame中添加一个列,我必须稍后将其过滤掉,而不是在我的输出中获取它。

那么,在熊猫中有没有更惯用的方法呢?一个不要求我知道有关列名的任何内容,而不是更改DataFrame?

1 个答案:

答案 0 :(得分:1)

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

apply_to_matching(df, slice(None, None))