为了账号安全,请及时绑定邮箱和手机立即绑定

在 pandas 中使用 `isin(list1)` 来识别包含 list1 中所有项目的列中的值

在 pandas 中使用 `isin(list1)` 来识别包含 list1 中所有项目的列中的值

繁华开满天机 2022-07-19 16:43:05
对于给定的 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')


查看完整回答
反对 回复 2022-07-19
?
收到一只叮咚

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')


查看完整回答
反对 回复 2022-07-19
  • 2 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信