计算一列中字符串在另一列中的出现次数

Count occurrences of a string from one column in another

我有一个看起来像这样的 df:

  Policy Letter             Password Lower Upper
0    4-5      l               rllllj     4     5
1   4-10      s  ssskssphrlpscsxrfsr     4    10
2  14-18      p  ppppppppppppppppppp    14    18
3    1-6      z       zzlzvmqbzzclrz     1     6
4    4-5      j          jhjjhxhjkxj     4     5

我想统计'Letter'栏中的字母在密码中出现了多少次 从每一行的 'Password' 列开始。

换句话说,第一行(4)的密码中有多少个l。 第二行的密码中有多少个 s (8)。

以此类推

如果我这样做:

df['Count'] = df['Password'].str.count('s')

它运行正确,但它只计算列中每个密码中的 s。

当我尝试这个时:

df['Count'] = df['Password'].str.count(df['Letter'])

它抛出一个错误:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

我不知道如何(如果可能的话)让 str.count() 为每一行检查不同的值。

您可以在每一行上应用自定义函数(如循环):

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

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

有领悟:

df['Count'] = [x.Password.count(x.Letter) for x in df.itertuples()]
# df['Count'] = [x[3].count(x[2]) for x in df.itertuples()]