我们有一列中有列表的数据框。找不到简单的方法来过滤包含列表中的值的行的数据框。
df = pd.DataFrame({'lists':[['a', 'c'], ['a', 'b', 'd'], ['c', 'd']]})
Run Code Online (Sandbox Code Playgroud)
例如,我只需要在其列表中包含“a”的行。我只能通过“申请”获得它。
df[df.lists.apply(lambda x: True if 'a' in x else False)]
>>> lists
>>>0 [a, c]
>>>1 [a, b, d]
Run Code Online (Sandbox Code Playgroud)
有没有像 .isin() 这样的东西,但反之亦然?获得所需行的最佳方法是什么?谢谢。
请帮助我理解为什么" 不平等 "的情况不能正常工作.
>>>d = {'a' : [1, 2, 3, 3, 1, 4],
>>> 'b' : [4, 3, 2, 1, 2, 2]}
>>>df = pd.DataFrame(d)
a b
0 1 4
1 2 3
2 3 2
3 3 1
4 1 2
5 4 2
Run Code Online (Sandbox Code Playgroud)
如果我使用相同的条件,我们得到正确的结果logical_and:
>>>df[np.logical_and(df['a']==3, df['b']==2)]
a b
2 3 2
Run Code Online (Sandbox Code Playgroud)
但是如果我们将条件改为不相等则它会停止正常工作:
>>>df[np.logical_and(df['a']!=3, df['b']!=2)]
a b
0 1 4
1 2 3
Run Code Online (Sandbox Code Playgroud)
这类似条件OR而不是AND.
但如果我们~之前使用它,它再次正常工作np.logical_and
>>>df[~np.logical_and(df['a']==3, df['b']==2)]
a b
0 1 4
1 2 …Run Code Online (Sandbox Code Playgroud)