J'ai de nombreuses trames de données avec une colonne (même nom en tout) dont les index sont des plages de dates - je souhaite fusionner/combiner ces trames de données en une seule, en additionnant les valeurs où toutes les dates sont communes. ci-dessous est un exemple simplifié

range1 = pd.date_range('2021-10-01','2021-11-01')
range2 = pd.date_range('2021-11-01','2021-12-01')

df1 = pd.DataFrame(np.random.rand(len(range1),1), columns=['value'], index=range1)
df2 = pd.DataFrame(np.random.rand(len(range2),1), columns=['value'], index=range2)

Ici '2021-11-01' apparaît à la fois dans df1 et df2 avec des valeurs différentes

Je souhaite obtenir une seule dataframe de 62 lignes (32+31-1) où la date 2021-11-01 contient la somme de ses valeurs dans df1 et df2

0
laszlopanaflex 28 nov. 2021 à 05:19
Vous pouvez concaténer les dataframes en utilisant df = pd.concat([df1,df2..], axis=0) puis utiliser le df.groupby , comme df.groupby('date)['value'].sum()`
 – 
Priya
28 nov. 2021 à 05:35

1 réponse

Meilleure réponse

Nous pouvons utiliser pd.concate() sur les deux dataframes, puis df.reset_index() pour obtenir un nouvel index d'entiers réguliers, renommer la colonne de date, puis utiliser df.groupby().sum().

df = pd.concat([df1,df2]) # this gives 63 rows by 1 column, where the column is the values and the dates are the index
df = df.reset_index() # moves the dates to a column, now called 'index', and makes a new integer index
df = df.rename(columns={'index':'Date'}) #renames the column
df.groupby('Date').sum()
3
scotscotmcc 28 nov. 2021 à 05:33