【问题标题】:searching a string pattern from a Data-frame column in pandas从 Pandas 的数据框列中搜索字符串模式
【发布时间】:2016-04-25 15:09:59
【问题描述】:

继续我在堆栈中的最后一个问题searching matching string pattern from dataframe column in python pandas

假设我有一个数据框

 name         genre
 satya      |ACTION|DRAMA|IC|
 satya      |COMEDY|DRAMA|SOCIAL|MUSIC|
 abc        |DRAMA|ACTION|BIOPIC|
 xyz        |ACTION||ROMANCE|DARMA|
 def        |ACTION|SPORT|COMEDY|IC|
 ghj        |IC|ACTIONDRAMA|NOACTION|

从我上一个问题的答案来看,我可以搜索任何一种类型(前 IC)如果独立存在于流派列中,而不是作为任何其他流派字符串值(MUSIC 或 BIOPIC)的一部分。

现在我想查找 ACTION 和 DRAMA 是否都出现在流派列中,但不一定按特定顺序出现,并且不是字符串的一部分,而是单独出现。

所以我需要输出行[1,3,4]中的行

 name         genre
 satya      |ACTION|DRAMA|IC|   # both adjacently present
 #row 2 will not come           # as only DRAMA present not ACTION
 abc        |DRAMA|ACTION|BIOPIC|   ### both adjacently present in diff. order
 xyz        |ACTION||ROMANCE|DARMA|   ### both present not adjacent
 ##row  5 should not present as DRAMA is not here
 ## row 6 should not come as both are not present individually(but present as one string part)

我尝试了类似的东西

 x = df[df['gen'].str.contains('\|ACTION\|DRAMA\|')]
 ### got only Row  1 (ACTION and DRAMA in adjacent and in order ACTION->DRAMA)

请有人建议可以在此处遵循/添加的内容,以便我可以在此处获得所需的内容。

【问题讨论】:

  • x = df[df['gen'].str.contains(r'(?s)^(?=.*\bACTION\b)(?=.*\bDRAMA\b)')]
  • 如果出现动作和戏剧,您想返回整行吗?
  • 或者只是检查它们是否刚刚出现在行中?
  • @JanLeeYu- 想要将行返回到另一个数据框。
  • ghi 怎么样?真的是ACTIONDRAMA 还是ACTION|DRAMA

标签: python regex pandas


【解决方案1】:

我认为您可以使用带有两个条件的str.contains AND - &

print df
    name                        genre
0  satya            |ACTION|DRAMA|IC|
1  satya  |COMEDY|DRAMA|SOCIAL|MUSIC|
2    abc        |DRAMA|ACTION|BIOPIC|
3    xyz      |ACTION||ROMANCE|DRAMA|
4    def     |ACTION|SPORT|COMEDY|IC|
5    ghj    |IC|ACTIONDRAMA|NOACTION|

print df['genre'].str.contains('\|ACTION\|') & df['genre'].str.contains('\|DRAMA\|') 
0     True
1    False
2     True
3     True
4    False
5    False
Name: genre, dtype: bool

print df[ df['genre'].str.contains('\|ACTION\|') & df['genre'].str.contains('\|DRAMA\|') ]
    name                    genre
0  satya        |ACTION|DRAMA|IC|
2    abc    |DRAMA|ACTION|BIOPIC|
3    xyz  |ACTION||ROMANCE|DRAMA|

【讨论】:

  • @jezrael-Works.. 可能是我的一个偏题问题......有没有办法让这种事情动态化(使用 for 循环或一些列表理解)......就像我想要传递 [x,y,z] 然后对于 x y z 结果应该在基本数据帧上应用所有 3 个(如问题中应用的动作和戏剧)。我的列表内容应该是可变长度的。
  • 我认为这是 answer 用于您的评论问题 - np.logical_and.reduce([X,Y,Z])
  • @jezrael- 你能帮我解决这个问题吗stackoverflow.com/questions/37578530/…
【解决方案2】:

我不太确定这个答案,因为我这里没有编译器,但请尝试使用这个。

(\|ACTION|\|DRAMA).*?(\|ACTION|\|DRAMA)

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多