将一列中的第 n 个字母与另一列中的单个字母进行比较

Compare nth letter in one column to a single letter in another

我有一个df如下:

  Policy Letter             Password  Lower  Upper  Count  Lower_Minus_1  Upper_Minus_1
0    4-5      l               rllllj      4      5      4              3              4
1   4-10      s  ssskssphrlpscsxrfsr      4     10      8              3              9
2  14-18      p  ppppppppppppppppppp     14     18     19             13             17
3    1-6      z       zzlzvmqbzzclrz      1      6      6              0              5
4    4-5      j          jhjjhxhjkxj      4      5      5              3              4 

Lower_Minus_1 值将用作索引来搜索密码中的该位置,以查看它是否与列 'Letter'.

中的字母匹配

这一行有效:

print(df['Password'].str[3] == df['Letter'])

然而,它严格地returnsTrue\False基于每行'Password'中的值的第三个位置。

前五名:

0       True
1      False
2       True
3       True
4       True

我不想要每一行的第三个位置。我想要每一行的 Lower_Minus_1 位置。

我尝试了以下但都失败了:

print(df['Password'].str[df['Letter']] == df['Letter'])

Returns 每一行都是假的,如下所示:

print((df['Password'].str[df['Letter']] == df['Letter']).sum())

Returns: 0

然后我试了这个:

print(df.apply(lambda x: x['Password'].str[x['Lower_Minus_1']], axis=1) == df['Letter'])

这会引发错误:

  File "D:/AofC/2020_day2.py", line 56, in <lambda>
    print(df.apply(lambda x: x['Password'].str[x['Lower_Minus_1']], axis=1) == df['Letter'])
AttributeError: 'str' object has no attribute 'str'
df.apply(lambda x:x['Letter']== x['Password'][x.Lower_Minus_1], axis=1)
 
0     True
1    False
2     True
3     True
4     True
dtype: bool