繁体   English   中英

返回 pandas dataframe 中列中的元组包含特定值的行

[英]Return rows in pandas dataframe where tuple in column contains a certain value

我正在尝试查询 pandas dataframe 以查找其中一列包含包含特定值的元组的行。

举个例子:

   User                 Col1
0     1     (cat, dog, goat)
1     1         (cat, sheep)
2     1        (sheep, goat)
3     2          (cat, lion)
4     2  (fish, goat, lemur)
5     3           (cat, dog)
6     4          (dog, goat)
7     4                  cat

因此,假设我想返回Col1包含“cat”的行,有没有一种方法可以在不遍历每一行并执行“if”(我的实际数据集有更多行)的情况下执行此操作?

df['Col1'].isin(['cat'])

df['Col1'].str.contains("cat")

只为最后一行返回“真”

您可以在apply()中使用 lambda function :

df[df["Col1"].apply(lambda x: "cat" in x)]

"cat"在单元格中时,lambda 返回True 这适用于字符串( "cat" in "cat" is True )和元组( "cat" in ("cat", "dog") is True )。 通过对df进行子集化,您将获得 lambda 为True的所有行。

为什么不子集你的数据框,然后 output 它的结果?

catdf = df[df['Col1'].str.contains("cat")]

您的 DataFrame 列包含字符串和元组的混合。 我认为您无法避免迭代该列。 但是您可以使用 apply 方法高效地进行迭代。 示例代码如下。

import pandas as pd

# fake data - in a Series for simplicity
tlist = [('cat', 'dog', 'goat'),
    ('cat', 'sheep'),
    ('sheep', 'goat'),
    ('cat', 'lion'),
    ('fish', 'goat', 'lemur'),
    ('cat', 'dog'),
    ('dog', 'goat'),
    'cat']
s = pd.Series(tlist)

# iterate Series with a lambda function searching for 'cat'
s.apply(lambda x: 'cat' in x)

这给了我以下 output

Out[38]: 
0     True
1     True
2    False
3     True
4    False
5     True
6    False
7     True
dtype: bool

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM