Pandas选择查询位于元组列中的行

时间:2017-03-08 14:29:27

标签: python pandas dataframe

我有一个数据框,其中一列包含元组:

df = pd.DataFrame({'a':[1,2, 3], 'b':[(1,2), (3,4), (0,4)]})

   a       b
0  1  (1, 2)
1  2  (3, 4)
2  3  (0, 4)

我想选择我提供的元素在元组中的行。

例如,返回4在元组中的行,期望结果为:

   a       b
1  2  (3, 4)
2  3  (0, 4)

我试过了:

print(df[df['b'].isin([4])]

但是这会返回一个空的数据帧:

Empty DataFrame
Columns: [a, b]
Index: []

2 个答案:

答案 0 :(得分:1)

apply需要in

print(df[df['b'].apply(lambda x: 4 in x)])
   a       b
1  2  (3, 4)
2  3  (0, 4)

答案 1 :(得分:0)

您可以先将元组转换为集合,然后找到集合交叉点:

In [27]: df[df['b'].map(set) & {4}]
Out[27]:
   a       b
1  2  (3, 4)
2  3  (0, 4)

它也适用于多个值 - 例如,如果您要查找13所在的所有行:

In [29]: df[df['b'].map(set) & {1, 3}]
Out[29]:
   a       b
0  1  (1, 2)
1  2  (3, 4)

说明:

In [30]: df['b'].map(set)
Out[30]:
0    {1, 2}
1    {3, 4}
2    {0, 4}
Name: b, dtype: object

In [31]: df['b'].map(set) & {1, 3}
Out[31]:
0     True
1     True
2    False
Name: b, dtype: bool