亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算一列中有多少個字符出現在另一列中(熊貓)

計算一列中有多少個字符出現在另一列中(熊貓)

陪伴而非守候 2023-08-22 16:49:08
我正在嘗試計算第一列中有多少個字符出現在第二列中。它們可能以不同的順序出現,并且不應被計算兩次。例如,在這個 dfdf = pd.DataFrame(data=[["AL0","CP1","NM3","PK9","RM2"],["AL0X24",                            "CXP44",                            "MLN",                            "KKRR9",                            "22MMRRS"]]).T結果應該是:result = [3,2,2,2,3]
查看完整描述

3 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

set.intersection壓縮兩列后看起來像:

[len(set(a).intersection(set(b))) for a,b in zip(df[0],df[1])]
#[3, 2, 2, 2, 3]


查看完整回答
反對 回復 2023-08-22
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

如果您比較具有相同多個字符的名稱,例如,其他解決方案將失敗。AAL0和AAL0X24。這里的結果應該是 4。


from collections import Counter


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

                        ["AL0X24", "CXP44", "MLN", "KKRR9", "22MMRRS", "AAL0X24"]]).T


def 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_chars

0   AL0   AL0X24             3

1   CP1    CXP44             2

2   NM3      MLN             2

3   PK9    KKRR9             2

4   RM2  22MMRRS             3

5  AAL0  AAL0X24             4


查看完整回答
反對 回復 2023-08-22
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

堅持數據幀數據結構,你可以這樣做:


>>> 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  result

0  AL0   AL0X24       3

1  CP1    CXP44       2

2  NM3      MLN       2

3  PK9    KKRR9       2

4  RM2  22MMRRS       3


查看完整回答
反對 回復 2023-08-22
  • 3 回答
  • 0 關注
  • 1358 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號