大熊猫:使用列表元素(以字符串开头)过滤行吗?

时间:2018-09-21 11:05:41

标签: pandas

  

Blockquote

我有以下数据框。

d = pd.DataFrame({'a': [['foo', 'bar'], ['bar'], ['fah', 'baz']})

我只想返回其中以开头f开头的行-即第一行和第三行。

这是我尝试过的:

 d[d.a.is_in('f')]

2 个答案:

答案 0 :(得分:0)

在生成器的列表理解中使用any

d = d[[any(y.startswith('f') for y in x) for x in d['a']]]
print (d)
            a
0  [foo, bar]
2  [fah, baz]

详细信息 :(仅转换为示例列表)

print ([list(y.startswith('f') for y in x) for x in d['a']])
[[True, False], [False], [True, False]]

答案 1 :(得分:0)

使用.apply()的解决方案,遍历各个列表元素,使用.startswith()检查并评估结果列表的长度:

import pandas as pd

df = pd.DataFrame({'a': [['foo', 'bar'], ['bar'], ['fah', 'baz']]})
df = df[df.a.apply(lambda x: len([el for el in x if el.startswith('f')]) > 0)]
print(df)

结果为:

            a
0  [foo, bar]
2  [fah, baz]