J'essaie de créer une colonne de dataframe pandas (dans df1) où chaque élément est une liste de toutes les valeurs d'une autre dataframe (df2) qui correspondent à des colonnes existantes dans df1. Ceci est différent d'une fusion laissée par pandas car cette fonction créerait de nouvelles lignes à chaque fois que la valeur df1 est dupliquée dans df2.
J'ai du code qui fait exactement ce dont j'ai besoin, mais il est très lent (sur ma grande trame de données) et je suis presque sûr qu'il existe une méthode pandas intégrée pour faire ce que je recherche, mais je n'ai pas Je n'ai pas pu le trouver.
Voici une version simplifiée de mon code actuel.
import pandas as pd
df1=pd.DataFrame({'col4': [1,2,3,4,5,6]})
df2=pd.DataFrame({'col2':['a','b','c','d','e','f','g'],'col3':[1,1,2,3,4,4,6]})
df1['col1']=pd.Series(list(df2['col2'][df2['col3']==df1['col4'][i]]) for i in df1.index)
Existe-t-il un moyen d'utiliser la méthode pandas apply ou quelque chose de similaire pour le faire au lieu d'itérer sur df1.index? Merci!
3 Réponses :
Essayez :
df1.set_index('col4', inplace=True)
df1['col4'] = df2.groupby('col3').col2.apply(list)
df1.reset_index(drop=True, inplace=True)
Cela pourrait vous aider à y arriver, mais je pense que l'inefficacité pourrait persister en essayant de stocker une liste dans le DataFrame. Je pense que vous voudrez peut-être examiner un MultiIndex, mais je ne suis pas vraiment sûr de votre cas d'utilisation.
import pandas as pd
df1 = pd.DataFrame({'col4': [1,2,3,4,5,6]})
df2 = pd.DataFrame({'col2':['a','b','c','d','e','f','g'],'col3':[1,1,2,3,4,4,6]})
result = df1.join(df2.groupby('col3').agg(list), on='col4')