Python 组特有的Groupby筛选器
在groupby中执行筛选时遇到问题。过滤器用于groupby的每个数据帧内的元素;groupby的该数据帧唯一 我想根据ID上的第一个df进行分组,然后返回一个针对conditions_df中所示条件下的值进行过滤的df。该条件与第一个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 = [
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值