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

Hap*_*lop 6 python string filter pandas

我有一个 pandas 数据框,想要选择其中一列的值以另一列的值开头的行。我已经尝试过以下方法:

import pandas as pd

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

df_subset = df[df['A'].str.startswith(df['B'])]
Run Code Online (Sandbox Code Playgroud)

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

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

np.where(df['A'].str.startswith(df['B']), True, False)一切也从这里回归。True

Erf*_*fan 7

对于按行比较,我们可以使用DataFrame.apply

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

       A    B
0  apple  app
2     aa   aa
Run Code Online (Sandbox Code Playgroud)

您的代码不起作用的原因是因为Series.str.startswith接受 a character sequence(字符串标量),并且您正在使用 pandas Series。引用文档

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