如果两列中的一行包含相同的字符串python pandas

乔维奇

我有一个像这样的数据框:

    id      k1        k2         same
    1    re_setup    oo_setup   true
    2    oo_setup    oo_setup   true
    3    alerting    bounce     false
    4    bounce      re_oversetup   false
    5    re_oversetup    alerting   false
    6    alerting_s  re_setup   false
    7    re_oversetup    oo_setup   true
    8    alerting    bounce     false

因此,我需要对包含或不包含字符串“ setup”的行进行分类。

And simple output would be:
    id      k1        k2         same
    1    re_setup    oo_setup   true
    2    oo_setup    oo_setup   true
    3    alerting    bounce     false
    4    bounce      re_setup   false
    5    re_setup    alerting   false
    6    alerting_s  re_setup   false
    7    re_setup    oo_setup   true
    8    alerting    bounce     false

我已经尝试过这样做,但是据我所知,选择多个列时出现错误。

data['same'] = data[data['k1', 'k2'].str.contains('setup')==True]
耶斯列尔

我认为您需要apply使用str.contains,因为它仅适用于Series(一列):

print (data[['k1', 'k2']].apply(lambda x: x.str.contains('setup')))
      k1     k2
0   True   True
1   True   True
2  False  False
3  False   True
4   True  False
5  False   True
6   True   True
7  False  False

然后添加DataFrame.all检查True每行是否所有

data['same'] = data[['k1', 'k2']].apply(lambda x: x.str.contains('setup')).all(1)
print (data)
   id          k1        k2   same
0   1    re_setup  oo_setup   True
1   2    oo_setup  oo_setup   True
2   3    alerting    bounce  False
3   4      bounce  re_setup  False
4   5    re_setup  alerting  False
5   6  alerting_s  re_setup  False
6   7    re_setup  oo_setup   True
7   8    alerting    bounce  False

每行DataFrame.any至少检查一次True

data['same'] = data[['k1', 'k2']].applymap(lambda x: 'setup' in x).any(1)
print (data)
   id          k1        k2   same
0   1    re_setup  oo_setup   True
1   2    oo_setup  oo_setup   True
2   3    alerting    bounce  False
3   4      bounce  re_setup   True
4   5    re_setup  alerting   True
5   6  alerting_s  re_setup   True
6   7    re_setup  oo_setup   True
7   8    alerting    bounce  False

applymap明智检查的另一种解决方案

data['same'] = data[['k1', 'k2']].applymap(lambda x: 'setup' in x).all(1)
print (data)
   id          k1        k2   same
0   1    re_setup  oo_setup   True
1   2    oo_setup  oo_setup   True
2   3    alerting    bounce  False
3   4      bounce  re_setup  False
4   5    re_setup  alerting  False
5   6  alerting_s  re_setup  False
6   7    re_setup  oo_setup   True
7   8    alerting    bounce  False

如果只有2列,则带有&likeall|like的简单链条条件any

data['same'] = data['k1'].str.contains('setup') & data['k2'].str.contains('setup')
print (data)
   id          k1        k2   same
0   1    re_setup  oo_setup   True
1   2    oo_setup  oo_setup   True
2   3    alerting    bounce  False
3   4      bounce  re_setup  False
4   5    re_setup  alerting  False
5   6  alerting_s  re_setup  False
6   7    re_setup  oo_setup   True
7   8    alerting    bounce  False

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas:如果行包含某个字符串,则合并两行

Python / Pandas:如果行中的另一个字段包含字符串中的条件,则更新同一行中的字段

用上一行中的字符串替换列中的零(Python / Pandas)

如果同一行中的其他列与某个字符串匹配,Python Pandas 会创建新列

删除pandas DataFrame中的行,其中该行包含列表中存在的字符串?

如果另一列包含特定字符串,Python Pandas如何更新列

Python:pandas使用参数动态填充每一行中的字符串值

包含列中的字符串,Pandas

使用Apply检查pandas系列中的每一行是否包含列表中的字符串?

将包含空字符串的列合并为python pandas中的一列

Python pandas:如果不是None(連接字符串),則合併列值,然後只保留第一行

Python / Pandas:在一个步骤中是否不包含两个字符串中的任何一个的列?

Python pandas 数据框:在数组列中,如果第一个项目包含特定字符串,则从数组中删除该项目

如果下一行包含特定字符串,则在文件的新行中添加字符串

Python Pandas:检查同一列中另一列的字符串中是否包含一个列中的字符串

如果选定列名的子字符串与 Pandas 中一列内容的子字符串相同,则填充列

如果列包含任何指定的部分字符串,Pandas Dataframe 保持行

如果列在Pandas中包含任何字符串值,则从数据框中删除值

在Pandas DataFrame的每一行中添加具有最受欢迎字符串值的新列

Python:如果其他两列在同一行中包含“否”字符串,则从行中删除字符串值

如果包含特定子字符串,则替换基于 Pandas 数据帧中的列值

如何使用python / pandas根据一列中的字符串拆分和复制行?

Python / pandas:如何根据字符串条件增加每一行

将常量字符串附加到 Pandas 中数据帧的第一行

根据列上的子字符串条件在组中查找下一行-Pandas

使用 Pandas 计算前一行字符串中的变化

如果一行包含记事本中的某些字符串,请删除多行

熊猫:如果一行包含此子字符串,请更新此行中的单元格

在Pandas DataFrame中解析列,其中一列包含嵌套的JSON字符串