2014-10-31 71 views
0

我试图筛选使用大熊猫在数据帧行,而是使用:如何筛选与大熊猫行,而不使用列名 - 环路滤波器

df[(df.ColumnA == 1)] 

我希望能够做到这一点:

i = 'A' 
x = 'Column'+'i' 
df[(df.x == 1)] 

我的目标是在列过滤器中循环。 它甚至会更好,如果我能做到这一点:

i = A 
x = 'Column'+'i' 
y = 1 
df[(df.x == y)] 

让我在列环路和环路滤波器类型:

谢谢!

+0

由于循环过程中产生的昂贵开销,“pandas”方式主动避开循环,以支持正确的索引和选择。你确定你不能应用索引加,例如,一个lambda表达式来应用这些过滤器吗? – Manhattan 2014-10-31 20:37:44

+0

你说的话可以做,但它没有任何意义,这听起来像你只是想要一些用户定义的func,它需要一个列名和值来执行过滤,你能否解释更多。如果'i = A',那么你的代码就没有什么意义了,那么'x''Column'+'i''将会产生一个字符串''Column''而不是'ColumnA',这只是'x =' Column'+ i' – EdChum 2014-10-31 20:41:38

+0

@Metatron:感谢我寻找lambda的信息,并看到它也解决了我的问题! – Hangon 2014-11-01 10:16:49

回答

0

如果你想抓住从数据框中一个系列,但有麻烦,因为.符号不会允许一个变量,你可以使用括号来代替:

i = 'A' 
column = 'Column' + i 
df = df[df[column] == 1] 

你也可以在创建遮罩循环并一次全部应用:

column_base = 'Column' 
suffixes = ['A','B','C','D'] 
mask = None 

for i in suffixes: 
    column = column_base + i 
    if mask is None: 
     mask = df[column] == 1 
    else: 
     mask &= df[column] == 1 

df = df[mask] 
+0

感谢您解答我的问题的答案真的很清楚! 现在我将使用括号选项。 – Hangon 2014-11-01 10:18:58