在熊猫中,我可以使用辅助函数来确定镜头是否为三指针吗?我的实际功能要复杂得多,但为这个问题我简化了。
def isThree(x, y):
return (x + y == 3)
print data[isThree(data['x'], data['y'])].head()
答案 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'])