是否有更快的方式通过列表理解迭代两个数据帧?

时间:2016-04-10 16:21:12

标签: pandas dataframe list-comprehension

我有两个数据框,一个包含屏幕名称/显示名称,另一个包含个人,我正在尝试创建第三个数据框,其中包含每一个数据帧在新行中出现的所有数据屏幕名称/显示名称。从功能上讲,这将创建一个可能匹配的名称列表。我目前的代码完美但非常缓慢,看起来像这样:

# 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

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

1 个答案:

答案 0 :(得分:1)

您想要的是更快地遍历数据框。使用列表解析执行此操作是,从pandas数据帧中获取数据,使用python中的操作处理它,然后将其放回到pandas数据帧中。最快的方法(目前,使用小数据)将使用pandas迭代方法处理它。 您要做的下一件事是使用2个数据帧。大熊猫中有一个名为join的工具。

result = pd.merge(usernames, individuals, on=['Screen_Name', 'Last_Name'])

合并后,您可以进行过滤。

以下是文档:http://pandas.pydata.org/pandas-docs/stable/merging.html