我想用Python解决this question。在Python中匹配一个矢量的所有值的过滤器数据框
ID = np.concatenate((np.repeat("A",5),
np.repeat("B",4),
np.repeat("C",2)))
Hour = np.array([0,2,5,6,9,0,2,5,6,0,2])
testVector = [0,2,5]
df = pd.DataFrame({'ID' : ID, 'Hour': Hour})
我们组由ID
行,那么我们想去的地方不是在testVector
所有值在该组的列Hour
被发现从df
删除所有行。我们可以做到这一点如下:
def all_in(x,y):
return all([z in list(x) for z in y])
to_keep = df.groupby(by='ID')['Hour'].aggregate(lambda x: all_in(x,testVector))
to_keep = list(to_keep[to_keep].index)
df = df[df['ID'].isin(to_keep)]
我想使这个代码尽可能简短和高效。任何有关改进或替代解决方案的建议?
嗯,你想要最快的解决方案?什么是你的数据框的大小? – jezrael
@Jezrael,这项工作的主要目的是改进我的Python编码。所以,谢谢你的回答,从中学到了一些新东西;) – Florian
我测试时机和'ayhan的解决方案似乎最快:) – jezrael