【问题标题】:Selecting rows of a data frame when the column of the dataframe contains multiple values当数据框的列包含多个值时选择数据框的行
【发布时间】:2018-06-20 09:17:12
【问题描述】:

我有一个 pandas 数据框,其中“genres”列有多个由 “|” 分隔的值。我在下面放了一张图片。

包含电影细节的数据框:

如果我使用 split 函数,它将被转换为一个不可散列的列表。

现在我只想在 "genres" 中包含 "Action" 字样时选择数据框的行?我该怎么做?

提前致谢。

【问题讨论】:

    标签: python pandas dataframe series


    【解决方案1】:

    这是使用set 的一种解决方案:

    df = pd.DataFrame({'genres': ['A|B|C|D', 'A|B|C', 'B|D']})
    
    res = df[df['genres'].str.split('|').apply(set) >= {'D'}]
    
    print(res)
    
        genres
    0  A|B|C|D
    2      B|D
    

    这可以自然地扩展到多种流派:

    res = df[df['genres'].str.split('|').apply(set) >= {'A', 'B'}]
    
    print(res)
    
        genres
    0  A|B|C|D
    1    A|B|C
    

    【讨论】:

      【解决方案2】:

      你可以用这个:

      df = df[df['genres'].str.contains("Action")]
      

      例子:

      df = {'genres' : ('Action', 'crime', 'Action|crime', 'Romance|Action', 'Comedy'),'runtime' : (1,3,5,6,7)}
      df = pd.DataFrame(df)
      

      输出:

                 genres  runtime
      0          Action        1
      2    Action|crime        5
      3  Romance|Action        6
      

      【讨论】:

      • 我不建议这样做。如果一种类型是“动作”而另一种类型是“动作与冒险”怎么办?
      • 好点.. 但对于他展示的例子应该没​​问题。或者也许他还想保留“动作与冒险”
      • 这个怎么样,df = df[df['genres'].str.contains('|'.join(["Action","Adventure"])
      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多