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 № 1Używanie czystej pandy pd.concat
pd.concat([df.set_index(["Window", "Label"]) for df in [df1_, df2_, df3_]],
axis=1).reset_index()
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