当前位置: 首页 > 知识库问答 >
问题:

在Pandas中的多个列上查找字符串

倪举
2023-03-14

我试图找出一个字符串是否跨多个列存在。如果字符串存在,则返回1;如果不存在,则返回0,作为dataframe中的新系列。

搜索论坛后,我明白str.contains可以使用,但我正在搜索100多个列,因此一次使用单个系列对我来说是没有效率的。

如果相关,列中有一些NAs。

简化数据帧示例:

d = {'strings_1': ['AA', 'AB', 'AV'], 'strings_2': ['BB', 'BA', 'AG'], 
'strings_1': ['AE', 'AC', 'AI'], 'strings_3': ['AA', 'DD', 'PP'], 
'strings_4': ['AV', 'AB', 'BV']}
simple_df = pd.DataFrame(data=d)

例如,如果我对查找“AA”感兴趣,我想返回以下数据帧。

目标数据帧示例:

d = {'strings_1': ['AA', 'AB', 'AV'], 'strings_2': ['BB', 'BA', 'AG'], 
'strings_1': ['AE', 'AC', 'AI'], 'strings_3': ['AA', 'DD', 'PP'], 
'strings_4': ['AV', 'AB', 'BV'], 'AA_TRUE': [1, 0, 0]}
target_df = pd.DataFrame(data=d)

非常感谢你的帮助。

共有1个答案

柯英奕
2023-03-14

如果需要检查混合值-数字与字符串比较由值创建的numpy数组,请使用数据帧。任何检查,每行至少有一个True,最后一次转换为int

simple_df['new'] = (simple_df.values == 'AA').any(1).astype(int)
#or cast all values to string before comparing
#simple_df['new'] = (simple_df.astype(str)== 'AA').any(1).astype(int)
print (simple_df)
  strings_1 strings_2 strings_3 strings_4  new
0        AE        BB        AA        AV    1
1        AC        BA        DD        AB    0
2        AI        AG        PP        BV    0

详情:

print ((simple_df.values == 'AA'))
[[False False  True False False]
 [False False False False False]
 [False False False False False]]

print ((simple_df.values == 'AA').any(1))
[ True False False]

如果需要检查子字符串:

simple_df['new'] = simple_df.applymap(lambda x: 'G' in x).any(1).astype(int)
print (simple_df)
  strings_1 strings_2 strings_3 strings_4  new
0        AE        BB        AA        AV    0
1        AC        BA        DD        AB    0
2        AI        AG        PP        BV    1

 类似资料:
  • 问题内容: 如果我有这样的框架 我想检查这些行中是否包含某个单词,我只需要这样做。 输出: 如果我决定列出一个清单 如何检查列表中的行是否包含某个单词? 问题答案: 该方法接受正则表达式模式: 由于支持正则表达式模式,因此您还可以嵌入标志:

  • 如果我有这样一个框架 我想检查这些行中是否有包含某个单词的行,我必须这样做。 输出: 如果我决定列一个清单: 如何检查行是否包含列表中的某个单词?

  • 问题内容: 我需要检查是否在一个或多个列中找到了字符串。 基本上,我有一个程序,可让您检查多个字段(名称,姓氏等)。 如果同时检查了名称和姓氏,并且用户仅输入了名称,例如chris,则可以很容易地在mySQL中使用LIKE参数检查它,如下所示: 这显然有效。但是,我需要做的是,如果同时检查了姓名和姓氏,它将执行以下操作: 我希望如果在有一个名为john doe的客户端时执行此逻辑,则第二个命令仍会

  • 我有超过15个字符串列表,每个列表包含几个不同的代码。每个列表包含一种特定类型的代码。我有一个输入代码,必须找出该输入代码属于哪个列表,并根据结果返回一个特定字符串。我用if,else if来做这个。下面是示例代码 每个列表如下所示:公共静态列表codeTypeOneList=新ArrayList(); (其他代码类型的类似列表) 有没有更好的方法来实现这一点?谢谢

  • 查找字符串中出现最多的字符和个数? 如 sdsdsddssssssdd -> 字符最多的是s,出现9次 思路说明 利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。 然后将结果转化为字典类型。 特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。 解答1(python) import

  • 问题内容: 我想获取一列中字符串的频率计数。一方面,这类似于将数据框折叠为仅反映列中的字符串的一组行。我能够通过循环解决此问题,但知道有更好的解决方案。 df示例: 并想出去: 我搜索了很多论坛,但找不到合适的答案。 我假设使用pivot_table方法是正确的方法,但是无法获取正确的参数来折叠没有为输出df提供明显索引的表。 我可以通过使用value_counts()遍历每列并将每个值计数系列附