首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在熊猫数据中搜索字符串并与另一条进行匹配?

如何在熊猫数据中搜索字符串并与另一条进行匹配?
EN

Stack Overflow用户
提问于 2022-05-19 12:38:42
回答 1查看 47关注 0票数 0

我试图比较两种不同熊猫的数据(A和B)的2列(字符串),如果它们匹配字符串的一部分,我想将dataframe中的一列的值分配给dataframe B。

这是我的密码:

代码语言:javascript
复制
import numpy as np
import pandas as pd

A = ['DF-PI-05', 'DF-PI-09', 'DF-PI-10', 'DF-PI-15', 'DF-PI-16',
       'DF-PI-19', 'DF-PI-89', 'DF-PI-92', 'DF-PI-93', 'DF-PI-94',
       'DF-PI-95', 'DF-PI-96', 'DF-PI-25', 'DF-PI-29', 'DF-PI-30',
       'DF-PI-34', 'DF-PI-84']

B = ['PI-05', 'PI-10', 'PI-89', 'PI-90', 'PI-93', 'PI-94', 'PI-95',
       'PI-96', 'PI-09', 'PI-15', 'PI-16', 'PI-19', 'PI-91A', 'PI-91b',
       'PI-92', 'PI-25-CU', 'PI-29', 'PI-30', 'PI-34', 'PI-84-CU-S1',
       'PI-84-CU-S2']

import random
sample_size = len(A)
Group = [random.randint(0,1) for _ in range(sample_size)]

A = pd.DataFrame(list(zip(A,Group)),columns=['ID','Group'])
B = pd.DataFrame(B,columns=['Name'])

clus_tx = np.array([])
for date, row in B.iterrows():    
    for date2, row2 in A.iterrows():
        if row2['ID'] in row['Name']:
            clus = row['Group']
        else:
            clus = 999
        clus_tx = np.append(clus_tx,clus)
        
B['Group'] = clus_tx

我想要的是一个长度为B的np.array clus_tx,其中如果有一个与A ('PI-xx')中的字符串匹配的元素,我将从A获得'Group‘列的值,并将其赋值给B,如果没有字符串匹配,我会将999的值分配给B中的'Group’列,我认为我做的循环是错误的,因为clus_tx的大小不是我expected...My真实数据集的大小,所以我不能手动完成这个操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-19 13:08:24

首先,clus_tx的大小不是您想要的,原因是您将clus_tx = np.append(clus_tx,clus)放在最内部的循环中,它没有中断。所以clus_tx的长度总是len(A) x len(B)

第二,if语句块的逻辑不是您想要的。

我对代码做了一点改动,希望它能帮上忙:

代码语言:javascript
复制
import numpy as np
import pandas as pd

A = ['DF-PI-05', 'DF-PI-09', 'DF-PI-10', 'DF-PI-15', 'DF-PI-16',
       'DF-PI-19', 'DF-PI-89', 'DF-PI-92', 'DF-PI-93', 'DF-PI-94',
       'DF-PI-95', 'DF-PI-96', 'DF-PI-25', 'DF-PI-29', 'DF-PI-30',
       'DF-PI-34', 'DF-PI-84']

B = ['PI-05', 'PI-10', 'PI-89', 'PI-90', 'PI-93', 'PI-94', 'PI-95',
       'PI-96', 'PI-09', 'PI-15', 'PI-16', 'PI-19', 'PI-91A', 'PI-91b',
       'PI-92', 'PI-25-CU', 'PI-29', 'PI-30', 'PI-34', 'PI-84-CU-S1',
       'PI-84-CU-S2']

import random
sample_size = len(A)
Group = [random.randint(0,1) for _ in range(sample_size)]

A = pd.DataFrame(list(zip(A,Group)),columns=['ID','Group'])
B = pd.DataFrame(B,columns=['Name'])

clus_tx = np.array([])
for date, row_B in B.iterrows():
    clus = 999
    for date2, row_A in A.iterrows():
        if row_B['Name'] in row_A['ID']:
            clus = row_A['Group']
            break
    clus_tx = np.append(clus_tx,clus)
        
B['Group'] = clus_tx
print(B)

B的打印输出如下:

代码语言:javascript
复制
           Name  Group
0         PI-05    0.0
1         PI-10    0.0
2         PI-89    1.0
3         PI-90  999.0
4         PI-93    0.0
5         PI-94    1.0
6         PI-95    1.0
7         PI-96    0.0
8         PI-09    1.0
9         PI-15    0.0
10        PI-16    1.0
11        PI-19    1.0
12       PI-91A  999.0
13       PI-91b  999.0
14        PI-92    1.0
15     PI-25-CU  999.0
16        PI-29    0.0
17        PI-30    1.0
18        PI-34    0.0
19  PI-84-CU-S1  999.0
20  PI-84-CU-S2  999.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72304715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档