【问题标题】:Pandas slicing by element in cell熊猫按单元格中的元素切片
【发布时间】:2016-09-23 18:22:56
【问题描述】:

通过在单元格中查找单个元素进行切片的最佳方法是什么?我知道如何使用单元格元素在列表中的 .isin() 函数来做到这一点。但我实际上正在寻找相反的结果:

id       vals
1        ['wow', 'very', 'such']
2        ['wow', 'such']
3        ['very', 'such']

我想要这样的东西(但这不起作用):

df['very' in df['vals']]

id       vals
1        ['wow', 'very', 'such']
3        ['very', 'such']

我认为另一种方法是使用 apply(),匹配值,但似乎有点不雅。

【问题讨论】:

  • 是否要匹配包含delivery 的字符串(其中very 是子字符串)?

标签: python pandas slice


【解决方案1】:

可以使用list-comprehension 选择仅包含字符串 very 的行:

df[['very' in x for x in df['vals'].values]]

【讨论】:

    【解决方案2】:
    df[df.vals.apply(lambda x: 'very' in x)]
    Out[9]: 
                    vals
    0  [wow, very, such]
    2       [very, such]
    

    【讨论】:

    • PS:尊重 OP 的编辑评论,pandas 中的不雅点可能是将列表对象存储在数据框中。要考虑的一个选项是将列表拆分为列并使用它。同时 apply 也不错
    • 感谢您的意见。如果可能的单词列表在 10,000 以内怎么办?
    • 你有 10000 列,这会是什么问题?
    • 我觉得用这样的稀疏表来直观地解释会更困难
    • 不确定在 10k 水平列表与 10k 列水平标量之间进行可视化会更加困难。但这是您权衡的选择:您没有标量意味着您阻止代码使用所有 pandas 功能,因此您必须使用 apply。
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2021-08-07
    • 2015-11-21
    • 2020-06-28
    • 2018-12-11
    相关资源
    最近更新 更多