猿问

计算一列中有多少个字符出现在另一列中(熊猫)

我正在尝试计算第一列中有多少个字符出现在第二列中。它们可能以不同的顺序出现,并且不应被计算两次。


例如,在这个 df


df = pd.DataFrame(data=[["AL0","CP1","NM3","PK9","RM2"],["AL0X24",

                            "CXP44",

                            "MLN",

                            "KKRR9",

                            "22MMRRS"]]).T

结果应该是:


result = [3,2,2,2,3]


陪伴而非守候
浏览 1329回答 3
3回答

慕莱坞森

set.intersection压缩两列后看起来像:[len(set(a).intersection(set(b))) for a,b in zip(df[0],df[1])] #[3, 2, 2, 2, 3]

慕婉清6462132

如果您比较具有相同多个字符的名称,例如,其他解决方案将失败。AAL0和AAL0X24。这里的结果应该是 4。from collections import Counterdf = pd.DataFrame(data=[["AL0","CP1","NM3","PK9","RM2", "AAL0"],                        ["AL0X24", "CXP44", "MLN", "KKRR9", "22MMRRS", "AAL0X24"]]).Tdef num_shared_chars(char_counter1, char_counter2):    shared_chars = set(char_counter1.keys()).intersection(char_counter2.keys())    return sum([min(char_counter1[k], char_counter2[k]) for k in shared_chars])df_counter = df.applymap(Counter)df['shared_chars'] = df_counter.apply(lambda row: num_shared_chars(row[0], row[1]), axis = 'columns')结果:      0        1  shared_chars0   AL0   AL0X24             31   CP1    CXP44             22   NM3      MLN             23   PK9    KKRR9             24   RM2  22MMRRS             35  AAL0  AAL0X24             4

胡子哥哥

坚持数据帧数据结构,你可以这样做:>>> def count_common(s1, s2):...     return len(set(s1) & set(s2))...>>> df["result"] = df.apply(lambda x: count_common(x[0], x[1]), axis=1)>>> df     0        1  result0  AL0   AL0X24       31  CP1    CXP44       22  NM3      MLN       23  PK9    KKRR9       24  RM2  22MMRRS       3
随时随地看视频慕课网APP

相关分类

Python
我要回答