2016-04-10 5 views
1

私は2つのデータフレームを持っています.1つは画面名/表示名を含み、もう1つは個人を含み、姓が画面に表示されるたびに新しい行に各データフレームのすべてのデータを含む3番目のデータフレームを作成しようとしています名前/表示名。機能的には、一致する可能性のある名前のリストが作成されます。非常にゆっくりと完璧に動作しますが、私の現在のコードは、次のようになります。2つのデータフレームを繰り返し処理するためのリストの理解がより高速になりますか?

# 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 

私は、各列から行全体を必要とするので、私が試してみましたリストの内包方法が動作していないようです。

+0

は、次の2つのデータセットのサンプルとあなたが探している出力を表示することができますか? – Abbas

+0

データセットは簡単です:usernamesはuserid(int)、screen_name(小文字の小文字はスペースまたは特殊文字ではありません)、real_name(文字列)の3つの列を持ちます。個体はLast_Name(str)とFirst_Name(str)の2つの列を持ちます。目的は、screen_nameまたはreal_nameがLast_Nameのインスタンスと同じ文字列を持つすべてのインスタンスのデータフレームを作成し、その発生ごとにuserid、screen_name、real_name、last_nameおよびfirst_nameを格納することです。 – whateveryousayiam

答えて

0

あなたが望むのは、データフレームをより高速に反復することです。リストの理解でそれをすることは、pandasデータフレームからデータを取り出し、pythonでの操作を使用してそれを処理し、次にそれをpandasデータフレームに戻すことです。最も速い方法(現在、小さなデータで)は、パンダの反復方法を使用してそれを処理することです。 次は、2つのデータフレームで作業することです。パンダにはjoinというツールがあります。

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

マージ後、フィルタリングを行うことができます。ここで

はドキュメントです:http://pandas.pydata.org/pandas-docs/stable/merging.html

関連する問題