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

选择列A的值以列B的值开始的行

督飞羽
2023-03-14

我有一个数据框,希望选择一列的值以另一列的值开始的行。我尝试了以下方法:

import pandas as pd

df = pd.DataFrame({'A': ['apple', 'xyz', 'aa'],
                   'B': ['app', 'b', 'aa']})

df_subset = df[df['A'].str.startswith(df['B'])]

但是它出错了,我发现的这个解决方案也没有帮助。

KeyError: "None of [Float64Index([nan, nan, nan], dtype='float64')] are in the [columns]"

np。其中(df['A'].str.startswith(df['B']),True,False)从这里也返回所有的True

共有3个答案

张银龙
2023-03-14

无需使用for循环即可实现此目的:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['apple', 'xyz', 'aa'],
                   'B': ['app', 'b', 'aa']})

ufunc = np.frompyfunc(str.startswith, 2, 1)
idx = ufunc(df['A'], df['B'])
df[idx]

Out[22]: 
       A    B
0  apple  app
2     aa   aa
封永嘉
2023-03-14

您可能需要使用for循环,因为行检查不支持str.startswith

[x.startswith(y) for x , y in zip(df.A,df.B)]
Out[380]: [True, False, True]
df_sub=df[[x.startswith(y) for x , y in zip(df.A,df.B)]].copy()
盛柏
2023-03-14

对于行比较,我们可以使用DataFrame。应用

m = df.apply(lambda x: x['A'].startswith(x['B']), axis=1)
df[m]

       A    B
0  apple  app
2     aa   aa

你的代码不工作的原因是因为Series.str.startswith接受一个字符序列(一个字符串标量),而你使用的是熊猫Series。引用文档:

pat:str
字符序列。不接受正则表达式。

 类似资料:
  • 问题内容: 如何选择以某个字符串开头的列值的行? 例如,我想选择“名称”列以“先生”开头的行。 问题答案: 你可以做 参见http://www.sqlite.org/lang_expr.html

  • 问题内容: 我有一个表,其中的一列也包含以数字开头的数据,在MySQL上 如何选择仅以数字开头的行? 问题答案:

  • 问题内容: 我有这样的桌子 我需要选择何时类型为0,何时类型为1,何时类型为N … 我怎样才能做到这一点? 问题答案:

  • 问题内容: 我需要查询一个表并选择4列的值中的3个。我需要比较第三列和第四列的值,然后选择较大的值。 例如: 我需要退货: 我一直在尝试使用IF / ELSE,但是我似乎无法正确使用语法 问题答案: 在T-SQL中, IF 命令用于程序控制。例如: 在SQL语句中,您需要 CASE 。

  • 问题内容: 有没有一种方法可以选择某个表的列名,只有那些具有空值的列除外,而不知道该表有多少列。 应导致: 谢谢! 问题答案: 创建具有以下内容的存储过程:

  • 问题内容: 有没有一种方法可以针对具有指向ArrayList或List的where子句的数据源(可以是sql,oracle或access)创建查询? 例子: 我已经看到了使用Linq的一些方法,但是如果可以避免的话,我宁愿不诉诸于此。 问题答案: 您可以使用。尝试这样的事情: 附带说明,这不能保护您免受SQL注入的侵害-希望本示例将为您指明正确的方向。