pandas 数据框列中的成员资格测试

membership test in pandas data frame column

我有一个 pandas 数据框,其中一列是一个列表。请看下面:

>>> a.head
    C1  C2
0   23  [2,4,5,8,1]
1   24  [1,2]
2   15  [-2]
3   19  [1,3,4,5,6,7,8,9,0]

我想找到包含 C2 中的 6 和 return C1 中的值的行。我想到了类似

b = a["C1"][(6 in a["C2"])]
return(int(b))

但它不起作用。 谢谢

我认为您需要 applyin 作为 list 中的测试值来创建 boolean mask:

print (a.C2.apply(lambda x: 6 in x))
0    False
1    False
2    False
3     True
Name: C2, dtype: bool

然后 loc with boolean indexing 用于 select by mask:

b = a.loc[a.C2.apply(lambda x: 6 in x), 'C1']
print (b)
3    19
Name: C1, dtype: int64

如果需要标量输出转换为 numpy array 和 select 第一个值 []:

print (b.values)
[19]

print (b.values[0])
19

或使用iat or iloc:

print (b.iat[0])
19

print (b.iloc[0])
19

对于 built-in Pandas 方法尝试 isin.

Pandas 列,Series 个对象,有一个名为 isinmethod 专门用于此类事情.它 returns 一个位置 boolean Series (掩码)。它将在您的列中找到给定列表中的值。

s = pd.Series(['lama', 'cow', 'lama', 'beetle', 'lama',
               'hippo'], name='animal')
s.isin(['cow', 'lama'])
0     True
1     True
2     True
3    False
4     True
5    False