Est-il possible de ne fusionner que certaines colonnes? J'ai un DataFrame df1 avec les colonnes x, y, z et df2 avec les colonnes x, a, b, c, d, e, f, etc.
Je veux fusionner les deux DataFrames sur x, mais je veux seulement fusionner les colonnes df2.a, df2.b - pas la totalité du DataFrame.
Le résultat serait un DataFrame avec x, y, z, a, b.
Je pourrais fusionner puis supprimer les colonnes indésirables, mais il semble qu'il existe une meilleure méthode.
Vous pouvez fusionner le sous-DataFrame (avec seulement ces colonnes):
df2[list('xab')] # df2 but only with columns x, a, and b
df1.merge(df2[list('xab')])
Vous voulez utiliser DEUX crochets, donc si vous effectuez une sorte d'action VLOOKUP:
df = pd.merge(df,df2[['Key_Column','Target_Column']],on='Key_Column', how='left')
Cela vous donnera tout ce qui se trouve dans le fichier original df + ajoutez la colonne correspondante dans df2 que vous souhaitez rejoindre.
Vous pouvez utiliser .loc
pour sélectionner les colonnes spécifiques avec toutes les lignes, puis tirez cela. Un exemple est ci-dessous:
pandas.merge(dataframe1, dataframe2.iloc[:, [0:5]], how='left', on='key')
Dans cet exemple, vous fusionnez dataframe1 et dataframe2. Vous avez choisi de faire une jointure externe gauche sur 'clé'. Cependant, pour dataframe2, vous avez spécifié .iloc
qui vous permet de spécifier les lignes et les colonnes souhaitées dans un format numérique. En utilisant :
, votre sélection de toutes les lignes, mais [0:5]
sélectionne les 5 premières colonnes. Vous pouvez utiliser .loc
à spécifier par nom, mais si vous traitez avec des noms de colonne longs, alors .iloc
peut-être mieux.
Cela consiste à fusionner les colonnes sélectionnées à partir de deux tables.
Si table_1
contient t1_a,t1_b,t1_c..,id,..t1_z
colonnes et table_2
contient t2_a, t2_b, t2_c..., id,..t2_z
colonnes, et seulement t1_a, id, t2_a sont requis dans la table finale, puis
mergedCSV = table_1[['t1_a','id']].merge(table_2[['t2_a','id']], on = 'id',how = 'left')
# save resulting output file
mergedCSV.to_csv('output.csv',index = False)
J'ai la même situation, j'essaie de construire une fusion semblable à la requête suivante
select
rio.calculation_type,
rio.asin, rio.country, rio.channel,
rio.date, rio.running_inbound,
rio.running_outbound,
rio.inbound,
rio.outbound,
ro.outbound as ro_outbound,
min(ro.date) as date_out
from
running_inbound_and_outbound rio
left join running_outbound ro
on ro.running_outbound >= rio.running_inbound
and ro.country = rio.country
and ro.channel = rio.channel
and ro.asin = rio.asin
and ro.calculation_type = rio.calculation_type
group by
1, 2, 3, 4,5,6,7,8,9