继续堆叠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|
根据我上一个问题的答案,如果在类型栏中独立存在,我可以搜索任何一种类型(ex 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)
请有人建议可以遵循/添加的内容,以便我能在这里得到我需要的东西。
答案 0 :(得分:2)
我认为您可以将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|
答案 1 :(得分:0)
我不太确定这个答案,因为我这里没有编译器,但尝试使用这个。
(\|ACTION|\|DRAMA).*?(\|ACTION|\|DRAMA)
希望它有所帮助。