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中增加了一列,我必须稍后过滤掉它,这样才不会在输出中得到它。
那么,在Pandas中有没有一种更地道的方法来做到这一点呢?它不要求我知道任何关于列名的信息,也不需要更改DataFrame?
发布于 2016-10-28 17:01:31
当一切都应该是真时,布尔索引方法将需要一系列的True。使用上面的代码,另一种看待它的方法是,criterion参数也可以接收切片。获取所有行将意味着像这个df.loc[:, 'A']那样对整个行进行切片。当您需要将它作为参数传递给apply_to_matching函数时,请使用slice内置:
apply_to_matching(df, slice(None, None))https://stackoverflow.com/questions/40292466
复制相似问题