Je veux créer une colonne pandas 'Link' basée sur 2 autres colonnes (URL et Title) afin de créer une colonne qui contiendra une balise de lien HTML avec un titre sous forme:

<a href="{}">{}</a>'.format(df['Ad_URL'],df['Title'])

J'utilise:

def Ad_Link(df):
    return ('<a href="{}">{}</a>'.format(df['Ad_URL'],df['Title']))

df['Link'] = df[['Ad_URL','Title']].apply(lambda x:Ad_Link(x), axis=1)

Mais cela ne fonctionne pas comme prévu.

Il donne: <a href="List of all URLs">List of all Titles</a> pour tous les éléments dans df ['Link']

Il suppose itérer et donner:

<a href="URL[0]">Title[0]</a> 
<a href="URL[1]">Title[1]</a> 

MODIFIER

En fait, ma solution a fonctionné, a eu un problème avec la trame de données au départ.

2
Harvey 19 mars 2019 à 08:12

2 réponses

Meilleure réponse

D'abord, votre code fonctionne bien pour moi. Mais ajouté plusieurs solutions avec la même sortie:

df = pd.DataFrame({'Ad_URL':['u1', 'u2', 'u3'], 'Title':['t1', 't2', 't3']})


def Ad_Link(df):
    return ('<a href="{}">{}</a>'.format(df['Ad_URL'],df['Title']))

df['Link'] = df[['Ad_URL','Title']].apply(lambda x:Ad_Link(x), axis=1)

#change variable in function to x
def Ad_Link1(x):
    return ('<a href="{}">{}</a>'.format(x['Ad_URL'],x['Title']))

df['Link1'] = df[['Ad_URL','Title']].apply(lambda x:Ad_Link1(x), axis=1)

#removed lambda function
def Ad_Link2(x):
    return ('<a href="{}">{}</a>'.format(x['Ad_URL'],x['Title']))

df['Link2'] = df.apply(Ad_Link2, axis=1)

#pass columns names to lambda function, changed function
def Ad_Link3(url, link):
    return ('<a href="{}">{}</a>'.format(url, link))

df['Link3'] = df.apply(lambda x: Ad_Link3(x['Ad_URL'],x['Title']), axis=1)

#only lambda function solution
df['Link4'] = df.apply(lambda x: '<a href="{}">{}</a>'.format(x['Ad_URL'], x['Title']), axis=1)

print (df)
  Ad_URL Title                 Link                Link1                Link2  \
0     u1    t1  <a href="u1">t1</a>  <a href="u1">t1</a>  <a href="u1">t1</a>   
1     u2    t2  <a href="u2">t2</a>  <a href="u2">t2</a>  <a href="u2">t2</a>   
2     u3    t3  <a href="u3">t3</a>  <a href="u3">t3</a>  <a href="u3">t3</a>   

                 Link3                Link4  
0  <a href="u1">t1</a>  <a href="u1">t1</a>  
1  <a href="u2">t2</a>  <a href="u2">t2</a>  
2  <a href="u3">t3</a>  <a href="u3">t3</a>  
1
jezrael 19 mars 2019 à 07:34

Cela fonctionne bien pour moi.

df = pd.DataFrame({'Ad_URL':['u1', 'u2', 'u3'], 'Title':['t1', 't2', 't3']})

def Ad_Link(df):
    return ('<a href="{}">{}</a>'.format(df['Ad_URL'],df['Title']))

df['Link'] = df[['Ad_URL','Title']].apply(lambda x:Ad_Link(x), axis=1)

print(df)

Production:

  Ad_URL Title                 Link
0     u1    t1  <a href="u1">t1</a>
1     u2    t2  <a href="u2">t2</a>
2     u3    t3  <a href="u3">t3</a>
1
Mohit Musaddi 19 mars 2019 à 05:53