Pandas 是否有一种通过列表理解来迭代两个数据帧的更快方法?

Pandas 是否有一种通过列表理解来迭代两个数据帧的更快方法?,pandas,dataframe,list-comprehension,Pandas,Dataframe,List Comprehension,我有两个数据框,一个包含屏幕名/显示名,另一个包含个人,我正在尝试创建第三个数据框,每当屏幕名/显示名中出现姓氏时,该数据框将包含新行中每个数据框中的所有数据。从功能上讲,这将创建一个可能匹配名称的列表。我当前的代码工作得很好,但速度很慢,如下所示: # Original Social Media Screen Names # cols = 'userid','screen_name','real_name' usernames = pd.read_csv('social_media_accou

我有两个数据框,一个包含屏幕名/显示名,另一个包含个人,我正在尝试创建第三个数据框,每当屏幕名/显示名中出现姓氏时,该数据框将包含新行中每个数据框中的所有数据。从功能上讲,这将创建一个可能匹配名称的列表。我当前的代码工作得很好,但速度很慢,如下所示:

# Original Social Media Screen Names
# cols = 'userid','screen_name','real_name'
usernames = pd.read_csv('social_media_accounts.csv')

# List Of Individuals To Match To Accounts
# cols = 'first_name','last_name'
individuals = pd.read_csv('individuals_list.csv')

userid, screen_name, real_name, last_name, first_name = [],[],[],[],[]
for index1, row1 in individuals.iterrows():
    for index2, row2 in usernames.iterrows():
        if (row2['Screen_Name'].lower().find(row1['Last_Name'].lower()) != -1) | (row2['Real_Name'].lower().find(row1['Last_Name'].lower()) != -1):
            userid.append(row2['UserID'])
            screen_name.append(row2['Screen_Name'])
            real_name.append(row2['Real_Name'])
            last_name.append(row1['Last_Name'])
            first_name.append(row1['First_Name'])

cols = ['UserID', 'Screen_Name', 'Real_Name', 'Last_Name', 'First_Name']
index = range(0, len(userid))
match_list = pd.DataFrame(index=index, columns=cols)
match_list = match_list.fillna('')
match_list['UserID'] = userid
match_list['Screen_Name'] = screen_name
match_list['Real_Name'] = real_name
match_list['Last_Name'] = last_name
match_list['First_Name'] = first_name

因为我需要每列的整行,所以我尝试过的列表理解方法似乎不起作用。

您想要的是更快地遍历数据帧。通过列表理解,可以将数据从pandas数据帧中取出,使用python中的操作进行处理,然后将其放回pandas数据帧中。最快的方法(目前使用的是小数据)是使用迭代方法处理它。 接下来要做的是使用2个数据帧。熊猫中有一个叫做
join
的工具

result = pd.merge(usernames, individuals, on=['Screen_Name', 'Last_Name'])
合并后,您可以进行过滤


以下是文档:

您能展示两个数据集的样本和您想要的输出吗?这些数据集很简单:用户名有3列:userid(int)、screen_name(str小写无空格或特殊字符)、real_name(str)。个体有2个cols:姓(str)和名(str)。目标是为屏幕名称或真实名称与姓氏实例具有相同字符串序列的所有实例创建一个数据帧,并为每个实例存储用户名、屏幕名称、真实名称、姓氏和姓氏。