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