/ / Pandy łączą się z ramkami danych za pomocą wielu kluczy - python, panda, ramka danych

Pandy łączą ramki danych za pomocą wielu kluczy - python, panda, ramka danych

Mam 3 różne ramki danych, które chcę dołączyć, używając etykiet i okien jako kluczy.

DataFrame1

Window  Label  FeatA
123      1        h
123      2        f

DataFrame2

Window  Label  FeatB
123      1      d
123      2      s

DataFrame3

Window  Label  FeatC
123     1       d
123     2       c

Wynik

Window  Label  FeatA  FeatB  FeatC
123      1       h      d       d
123      2       f      s       c

Wiem, jak dołączyć do ramek danych za pomocą pandas.concat ale nie wiem, jak określić klucze. Każda pomoc byłaby bardzo doceniana.

Odpowiedzi:

2 dla odpowiedzi № 1

Używanie czystej pandy pd.concat

pd.concat([df.set_index(["Window", "Label"]) for df in [df1_, df2_, df3_]],
axis=1).reset_index()

wprowadź opis obrazu tutaj


3 dla odpowiedzi № 2

Musisz użyć merge funkcja łączenia tabel, dla twojego przypadku, ponieważ masz wiele ramek danych do przyłączenia, możesz umieścić je na liście, a następnie użyć reduce od functools scalić je jeden po drugim:

import pandas as pd
from functools import reduce
reduce(lambda x, y: pd.merge(x, y, on = ["Window", "Label"]), [df1, df2, df3])

#  Window   Label   FeatA   FeatB   FeatC
# 0   123       1       h      d        d
# 1   123       2       f      s        c

1 dla odpowiedzi nr 3

możesz użyć combine_first:

In[44]:df.combine_first(df1).combine_first(df2)[["Window","Label","FeatA","FeatB","FeatC"]]
Out[44]:
Window  Label FeatA FeatB FeatC
0     123      1     h     d     d
1     123      2     f     s     c

lub możesz użyć łączyć:

In[30]:df.merge(df1,on=["Window","Label"]).merge(df2,on=["Window","Label"])
Out[30]:
Window  Label FeatA FeatB FeatC
0     123      1     h     d     d
1     123      2     f     s     c