/ / Połącz wiele ramek danych w taki, który sumuje ich wartości zgodnie z indeksem - python, panda, suma

Połącz wiele ramek danych w taki, który sumuje ich wartości zgodnie z indeksem - python, panda, suma

Mam kilka ramek danych pand, każda z nichkolumna ints w nich, i chciałbym utworzyć nową ramkę danych z sumą ich wartości w każdym indeksie. Ich indeksy będą miały kilka nakładających się wpisów, a te są niecenzuralne, których wartości chcę dodać razem. Jeśli indeks znajduje się tylko w jednej ramce danych, chcę, aby nowa ramka danych (lub seria) zawierała ten indeks i po prostu użyła tej jednej wartości jako jej wartości. Wydaje się to proste, ale nie mogę tego zrozumieć, a dokumentacja wydaje się koncentrować na łączeniu ramek danych bardziej niż łączeniu ich wartości. Zasadniczo, biorąc pod uwagę dwie ramki danych, które wyglądają tak:

>>> df1
0
a  3
b  7
d  2
>>> df2
0
c  11
d  19

I chciałbym, aby końcowe wyniki wyglądały tak:

>>> df3
0
a   3
b   7
c  11
d  21

Z góry dziękuję.

Odpowiedzi:

3 dla odpowiedzi № 1

Najprostsza odpowiedź, jeśli dodajesz tylko dwie ramki danych:

# fill_value parameter specifies how to treat missing rows, since you can"t add NaN (i.e. add 0)
df3 = df1.add(df2, fill_value=0)

df3
Out[18]:
0
a  3
b  7
c  13
d  19

Jeśli jednak chcesz dodać więcej niż dwa, najprostszy i najszybszy sposób jest bardziej podobny do tego:

import pandas as pd

# initialize example inputs
df1 = pd.DataFrame([3, 7, 2], index=["a", "b", "c"])
df2 = pd.DataFrame([11, 19], index=["c", "d"])
df3 = pd.DataFrame([3, 7, 11, 21], index=["a", "b", "c", "d"])

# when concatenating with axis=1, columns are added side by side. Rows are matched with other rows having the same index.
aggregate_df = pd.concat([df1, df2, df3], axis=1)

# sum across columns (axis=1).  Convert resulting Series to DataFrame
df4 = aggregate_df.sum(axis=1).to_frame()

df4
Out[11]:
0
a   6
b  14
c  24
d  40
dtype: float64