对于给定的 pandas 数据框,如下所示, h1 h2 h3 mn a 1 mn b 1 rs b 1 pq a 1 we c 1如果我使用过滤器isin(),比如说df[df["h2"].isin(["a","b"])]["h1"].unique(),它会导致以下结果: h1 mn rs pq我需要找到与列表中所有元素匹配的条目,而不是与列表中任何元素匹配的行为,即所需的输出应该是: h1 mn这究竟是如何实现的?里面列表的元素个数isin()是任意的,可以多于2个。
2 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
您可以将issubset每个set组用于掩码:
s = df.groupby('h1')['h2'].apply(lambda x: set(["a","b"]).issubset(x))
print (s)
h1
mn True
pq False
rs False
we False
Name: h2, dtype: bool
然后过滤索引值:
vals = s.index[s]
print (vals)
Index(['mn'], dtype='object', name='h1')
收到一只叮咚
TA贡献1821条经验 获得超4个赞
groupby.filter与 一起使用np.isin:
new_df = df.groupby('h1').filter(lambda x: np.isin(['a','b'],x['h2']).all())
print(new_df)
h1 h2 h3
0 mn a 1
1 mn b 1
s = df.groupby('h1')['h2'].apply(lambda x: np.isin(['a','b'],x).all())
s.index[s]
#Index(['mn'], dtype='object', name='h1')
添加回答
举报
0/150
提交
取消