Blockquote
我有以下数据框。
d = pd.DataFrame({'a': [['foo', 'bar'], ['bar'], ['fah', 'baz']})
我只想返回其中以开头f
开头的行-即第一行和第三行。
这是我尝试过的:
d[d.a.is_in('f')]
答案 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]