检测并计算数据框中两个列表中的模式

我需要检测并计算 UF_cadastral 变量中有多少来自 UF_med 变量的模式。


那是我的数据集:


df = {'id': [1,2,3],

        'UF_med':[['SP', 'SC', 'PA'], ['SP'], ['AM', 'RJ', 'PA', 'RS']],

        'UF_cadastral': [['SP', 'PA'], ['SP'], ['AM', 'RS']]}


df = pd.DataFrame(df)

df.head()

虽然我需要计算模式,但我至少尝试检测一种模式。但是,代码仅检测 UF_med 变量的第一个模式。我用了那个代码:


df['Detect_Municipio'] = df.apply(lambda x: x['UF_med'] in x['UF_cadastral'], axis=1)


结果应该是这样的:


df = {'id': [1,2,3],

        'UF_med':[['SP', 'SC', 'PA'], ['SP'], ['AM', 'RJ', 'PA', 'RS']],

        'UF_cadastral': [['SP', 'PA'], ['SP'], ['AM', 'RS']],

        'Detect_Municipio':[2,1,2]}


df = pd.DataFrame(df)


倚天杖
浏览 94回答 3
3回答

qq_笑_17

df['check']=[list(set(x).intersection(set(y)))\  for x, y in zip(df.UF_med, df.UF_cadastral)]  df['count']=df.check.str.len()   id          UF_med   UF_cadastral     check     count0   1      [SP, SC, PA]     [SP, PA]  [SP, PA]      21   2              [SP]         [SP]      [SP]      12   3  [AM, RJ, PA, RS]     [AM, RS]  [AM, RS]      2或者只是替换list如下len:df['amount']=[len(set(x).intersection(set(y))) for x, y in zip(df.UF_med, df.UF_cadastral)]结果将是:id            UF_med UF_cadastral  amount0   1      [SP, SC, PA]     [SP, PA]       21   2              [SP]         [SP]       12   3  [AM, RJ, PA, RS]     [AM, RS]       2

RISEBY

尝试改变df['Detect_Municipio'] = df.apply(lambda x: x['UF_med'] in x['UF_cadastral'], axis=1)到df['Detect_Municipio'] = df.apply(     lambda x: len(set(x['UF_med']) & set(x['UF_cadastral'])), axis=1)表格的元素是列表,因此您可以使用列表交集来获取这些列表中的等效元素。Len 让你得到匹配的数量。

元芳怎么了

我不知道你到底想完成什么,但这是我最好的猜测:在两个列表中查找重叠的列表:df = {'id': [1,2,3],        'UF_med':[['SP', 'SC', 'PA'], ['SP'], ['AM', 'RJ', 'PA', 'RS']],        'UF_cadastral': [['SP', 'PA'], ['SP'], ['AM', 'RS']]}output = [item for item in df["UF_med"] if item in df["UF_cadastral"]]#output is [['SP']]在所有列表中查找重叠的字符串:df = {'id': [1,2,3],        'UF_med':[['SP', 'SC', 'PA'], ['SP'], ['AM', 'RJ', 'PA', 'RS']],        'UF_cadastral': [['SP', 'PA'], ['SP'], ['AM', 'RS']]}uf_med = {item for sublist in df["UF_med"] for item in sublist}uf_cadastral = {item for sublist in df["UF_cadastral"] for item in sublist}output = [item for item in uf_med if item in uf_cadastral]#output is ['AM', 'PA', 'RS', 'SP']在相同索引列表中查找重叠的字符串:df = {'id': [1,2,3],        'UF_med':[['SP', 'SC', 'PA'], ['SP'], ['AM', 'RJ', 'PA', 'RS']],        'UF_cadastral': [['SP', 'PA'], ['SP'], ['AM', 'RS']]}output = [{item for item in list1 if item in list2} for list1, list2 in zip(df["UF_med"], df["UF_cadastral"])]#output is [{'PA', 'SP'}, {'SP'}, {'AM', 'RS'}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python