我有一个数据框,其中一列包含元组:
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: []
答案 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)
它也适用于多个值 - 例如,如果您要查找1
或3
所在的所有行:
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