Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Fusionner des pandas dataframes

+3 votes

J'ai plusieurs dataframes avec une identifiant associé à chacune d'entre elle. Chaque df se présente de cette manière :

        Sum        Median    Mean
LPB93   46.076768  0.212121  0.213318
LWL85   35.987261  0.165605  0.166608
LWL85m  50.216769  0.231084  0.232485
NG86    38.646154  0.177778  0.178917
YN00    50.714068  0.233333  0.234787

J'aimerais l'insérer dans ma bdd. Pour ce faire, j'aimerais faire deux/trois choses :
1. Changer chaque dataframe en une df de une ligne, ou on aurait index_colname en colonne et l'id en index
2. Fusionner les dataframe pour former qu'une dataframe à envoyer à la bdd.

Le résultat final aurait cette gueule :

     LPB93Sum  LPB93Median ... YN00Median, YN00Mean
id1  value     value           value       value 
id2  value     value           value       value 

J'imagine qu'il y a des fonctions de pandas a exploiter ici mais je n'ai pas trouvé lesquelles.

demandé 8-Dec-2015 par Jev (388 points)

4 Réponses

+1 vote
 
Meilleure réponse

Pandas contient nativement des méthodes pour fusionner les Dataframes :c'est par ici !!!

répondu 24-Dec-2015 par Catime (142 points)
sélectionné 24-Dec-2015 par Jev

Cool merci !

+1 vote

Ca serait pas un truc dans ce genre ?

répondu 10-Dec-2015 par foxmask (2,880 points)

Je ne vois pas trop comment utiliser ça pour résoudre le problème :/

Un chouiya d'explication serait top ;)

@boblinux : je ne connais pas le sujet j'ai fait que lire la doc pour tenter de mettre sur la voie

+1 vote

En attendant que quelqu'un propose quelque chose de mieux, j'ai fait ceci :

def melt_dataframes(data, sep="") :
    # data = [(id, df), (id2, df2)]
    data_list = []
    index = []
    for single_data in data : 
        df_dic = single_data[1].to_dict()
        df_dic = {key1 + sep + key2 : value for key1, sub_dic in df_dic.iteritems() for key2, value in sub_dic.iteritems()}
        index.append(single_data[0])
        data_list.append(df_dic)
    return pd.DataFrame(data_list, index=index)
répondu 10-Dec-2015 par Jev (388 points)
0 votes

Transformer un DataFrame en TimeSeries est assez simple avec la fonction stack.

import pandas as pd
df1 = pd.DataFrame({
   'Sum': pd.Series([46, 35], index=['LPB93', 'LWL85']),
   'Median': pd.Series([0.2, 0.1], index=['LPB93', 'LWL85'])
})
df1.stack()

Regrouper ensuite les time series est également assez direct

final_df = pf.DataFrame({
   'id1': df1.stack(),
   'id2': df2.stack()
})

La seule difficulté est que l'index de final_df est un multi index, mais on peut facilement l'aplatir

final_df.index = [''.join(i) for i in final_df.index.tolist()]

Et la final touch, on transpose le tout

final_df = final_df.transpose()
répondu 17-Dec-2015 par benjamin (394 points)
...