Python 组特有的Groupby筛选器

Python 组特有的Groupby筛选器,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,在groupby中执行筛选时遇到问题。过滤器用于groupby的每个数据帧内的元素;groupby的该数据帧唯一 我想根据ID上的第一个df进行分组,然后返回一个针对conditions_df中所示条件下的值进行过滤的df。该条件与第一个groupby的值关联 df = pd.DataFrame({'ID':[1,1,2,2,3,3], 'V': [0,1,1,0,1,1]}) condition_df = pd.DataFrame(index = [

在groupby中执行筛选时遇到问题。过滤器用于groupby的每个数据帧内的元素;groupby的该数据帧唯一

我想根据ID上的第一个df进行分组,然后返回一个针对conditions_df中所示条件下的值进行过滤的df。该条件与第一个groupby的值关联

df = pd.DataFrame({'ID':[1,1,2,2,3,3], 
                   'V': [0,1,1,0,1,1]})


condition_df = pd.DataFrame(index = [1,2,3], data= {'Condition': [0,1,1]})
我希望看到返回的数据帧:

df = pd.DataFrame({'ID':[1,2,3,3], 
                   'V': [0,1,1,1]})
这似乎不起作用

df.groupby(['ID']).filter(lambda x: x['V'] == condition_df.loc[x.index, ['Condition']]) 
即使没有这种条件下的查找,简化也似乎不起作用

df.groupby(['ID']).filter(lambda x: x['V'] == 0) 
两者都返回a

TypeError:filter函数返回了一个序列,但需要一个标量 “布尔”


完全开放的替代方法来完成同样复杂的过滤任务

加入您的条件,然后筛选:

df = df.join(condition_df, on="ID")
df[df["V"] == df["Condition"]]
结果:

   ID  V  Condition
0   1  0          0
2   2  1          1
4   3  1          1
5   3  1          1

只需
合并

df.merge(condition_df.reset_index().rename(columns={'index':'ID','Condition':'V'}),how='inner')
Out[831]: 
   ID  V
0   1  0
1   2  1
2   3  1
3   3  1
你需要:

df.merge(condition_df.reset_index(), left_on=['ID', 'V'], right_on=['index', 'Condition']).drop(['index', 'Condition'], 1)
输出:

ID  V
0   1   0
1   2   1
2   3   1
3   3   1

不清楚你想做什么。您正在尝试筛选数据帧以仅显示与条件匹配的行,其中条件索引与
ID
匹配?我想找到与条件中ID唯一的条件相同的V值