2017-01-19 9 views
0

Ich habe ein 2 Datenframe, in der ersten Spalte, wo ich einige Informationen finden sollte zweite Spalte, was ich im ersten Datenblock und Spalten finden sollte, was ich hinzufügen sollte, wenn Zeichenfolge von der ersten Spalte enthalten.Pandas: Teilzeichenfolge in Zeichenfolge in einigen Spalten

df1:

id url 
111 vk.com/audio 
222 twitter.com/chats 

df2:

url Maincategory Subcategory 
vk.com Social Network entertainment 
twitter.com Social Network entertainment 

Wenn url Spalte Spiel wäre, würde ich

df1['Main Category'] = df1.url.map(df2.set_index('url')['Maincategory']) 

verwenden, aber es funktioniert nicht String zu finden. Ich benutze für diese

mapping = dict(df2.set_index('url')['Maincategory']) 
def map_to_substring(x): 
    for key in mapping.keys(): 
     if key in x: 
      return mapping[key] 
    return 'None' 

Aber wenn df zu viel ist, dauert es zu viel Zeit. Wie kann ich diesen Ansatz verbessern, um es schneller zu machen?

+0

Wenn Sie mit dem Domain-Namen übereinstimmen, könnte es sinnvoll sein, eine Spalte zu Ihrem Dataframe mit 'urlparse' hinzuzufügen. Sie können genau auf dem 'netloc' abgleichen. Natürlich funktioniert dies nicht für beliebige Teilstrings, aber es könnte in Ihrem Fall funktionieren. Referenz: https://docs.python.org/2/library/urlparse.html – Mikk

+0

@Mikk nicht immer Domäne –

Antwort

0

es ist nicht klar, was Sie fordern, aber Sie sollten die Pandas str.contains Methoden http://pandas.pydata.org/pandas-docs/stable/text.html

als allgemeine Regel verwenden, können Sie eine Schleife über jede Spalte in dem ersten Datenrahmen, und in dem zweiten nach einer Übereinstimmung suchen . Es gibt keine schnellere Lösung als diese. Ich denke,

Verwandte Themen