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))
但它不起作用。
谢谢
我认为您需要 apply
和 in
作为 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
print (b.iat[0])
19
print (b.iloc[0])
19
对于 built-in Pandas 方法尝试 isin
.
Pandas 列,Series
个对象,有一个名为 isin
的 method 专门用于此类事情.它 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
我有一个 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))
但它不起作用。 谢谢
我认为您需要 apply
和 in
作为 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
print (b.iat[0])
19
print (b.iloc[0])
19
对于 built-in Pandas 方法尝试 isin
.
Pandas 列,Series
个对象,有一个名为 isin
的 method 专门用于此类事情.它 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