Veuillez utiliser l'image ci-jointe comme référence.

J'ai deux dataframes

Df_class_a

Avec des données:

Subject maximum minimum
Physics  98      50 
Maths    100     45 
Chem     99      65  

Df_class_b avec des données

Subject maximum minimum
Maths    100     45 
Physics  98      44 
Chem     85      50 
language 88      54 

Et je veux les fusionner pour former une nouvelle trame de données, dites df_add

Subject maximum minimum
Maths    200     90 
Physics  196     94 
Chem     184     115 
Language  88     54

Qui sera la somme des dataframes mais les deux n'ont pas les mêmes lignes de données. Comment puis-je le faire en utilisant la fonctionnalité .add dans les pandas.

enter image description here

2
xnorphic2652 25 oct. 2020 à 11:30

3 réponses

Meilleure réponse

Une autre solution:

m = pd.merge(df1, df2, on='Subject', how='outer')
m['maximum'] = m[['maximum_x', 'maximum_y']].sum(axis=1)
m['minimum'] = m[['minimum_x', 'minimum_y']].sum(axis=1)

print(m[['Subject', 'maximum', 'minimum']])

Tirages:

    Subject  maximum  minimum
0     Maths    200.0     90.0
1   Physics    196.0     94.0
2      Chem    184.0    115.0
3  language     88.0     54.0
1
jezrael 25 oct. 2020 à 08:45

Tu peux essayer:

df_add = pd.DataFrame({
'Subject': df_class_a['Subject'],
'Maximum': df_class_a['Maximum']+df_class_b['Maximum'],
'Minimum': df_class_a['Minimum']+df_class_b['Minimum']
})
0
Wasif Hasan 25 oct. 2020 à 08:36

Convertissez Subject en index dans les deux DataFrames par DataFrame.set_index, puis utilisez DataFrame.add avec fill_value=0):

df = df_class_a.set_index('Subject').add(df_class_b.set_index('Subject'), fill_value=0)
print (df)
          maximum  minimum
Subject                   
Chem        184.0    115.0
Maths       200.0     90.0
Physics     196.0     94.0
language     88.0     54.0

Ou utilisez concat avec agréger sum:

df = pd.concat([df_class_a, df_class_b]).groupby('Subject', as_index=False).sum()
print (df)
    Subject  maximum  minimum
0      Chem      184      115
1     Maths      200       90
2   Physics      196       94
3  language       88       54
1
jezrael 25 oct. 2020 à 08:39