是否可以在熊猫中使用自定义过滤器功能?

时间:2019-04-01 20:52:12

标签: python pandas

在熊猫中,我可以使用辅助函数来确定镜头是否为三指针吗?我的实际功能要复杂得多,但为这个问题我简化了。

def isThree(x, y):
    return (x + y == 3)

print data[isThree(data['x'], data['y'])].head()

4 个答案:

答案 0 :(得分:3)

是:

import numpy as np
import pandas as pd

data = pd.DataFrame({'x': np.random.randint(1,3,10),
                     'y': np.random.randint(1,3,10)})
print(data)

输出:

   x  y
0  1  2
1  2  1
2  2  1
3  1  2
4  2  1
5  2  1
6  2  1
7  2  1
8  2  1
9  2  2
def isThree(x, y):
    return (x + y == 3)

print(data[isThree(data['x'], data['y'])].head())

输出:

   x  y
0  1  2
1  2  1
2  2  1
3  1  2
4  2  1

答案 1 :(得分:1)

在这种情况下,我建议使用np.where()。请参见以下示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'x': [1,2,4,2,3,1,2,3,4,0], 'y': [0,1,2,0,0,2,4,0,1,2]})

df['3 Pointer'] = np.where(df['x']+df['y']==3, 1, 0)

收益:

   x  y  3 Pointer
0  1  0          0
1  2  1          1
2  4  2          0
3  2  0          0
4  3  0          1
5  1  2          1
6  2  4          0
7  3  0          1
8  4  1          0
9  0  2          0

答案 2 :(得分:1)

是的,只要您的函数返回具有相同索引的布尔系列,就可以使用输出对原始DataFrame进行切片。在这个简单的示例中,我们可以将Series传递给您的函数:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 4, (30, 2)))
def isThree(x, y):
    return x + y == 3

df[isThree(df[0], df[1])]
#    0  1
#2   2  1
#5   2  1
#9   0  3
#11  2  1
#12  0  3
#13  2  1
#27  3  0

答案 3 :(得分:-2)

您可以使用np.vectorize。文档在这里https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html

def isThree(x, y):
    return (x + y == 3)

df=pd.DataFrame({'A':[1,2],'B':[2,0]})
df['new_column'] = np.vectorize(isThree)(df['A'], df['B'])