I zwei Datenrahmen haben, wie folgt aus:Zusammenführen von zwei Datenrahmen durch den Index und Spalten
df1 = pd.DataFrame()
df1['v1'] = [5,7,2,4,9,7,2]
df1['v2'] = ["a1", 'nan', "a2", "a3", "a5", "a6", "a9"]
v1 v2
0 5 a1
1 7 nan
2 2 a2
3 4 a3
4 9 a5
5 7 a6
6 2 a9
und
dfa = pd.DataFrame()
dfa['pc1'] = np.random.rand(5)
dfa['pc2'] = np.random.rand(5)
dfa['idx'] = ["a1", "a2", "a3", "a6", "a9"]
df2 = dfa.set_index('idx')
pc1 pc2
idx
a1 0.048725 0.050773
a2 0.289110 0.302272
a3 0.720966 0.663910
a6 0.021616 0.308114
a9 0.205923 0.583591
df1 hat eine Spalte v2, die Zeichenwerte enthält, die den Index der DF2 übereinstimmen . Aber es hat auch nan und kann Zeichen enthalten, in denen keine entsprechenden rownames in df2 existieren.
Ich möchte nun diesen Datenrahmen ein, wie dies fusionieren:
v1 v2 pc1 pc2
0 5 a1 0.048725 0.050773
1 7 nan nan nan
2 2 a2 0.289110 0.302272
3 4 a3 0.720966 0.663910
4 9 a5 nan nan
5 7 a6 0.021616 0.308114
6 2 a9 0.205923 0.583591
In R
ist dies sehr einfach mit den rownames_to_column(df2, "v2")
und left_join(df1, .)
Funktionen.
Aber wie kann ich es in Pandas machen?
mögliche duplizieren zu [diese Frage] (https://stackoverflow.com/questions/33017452/merging-two-data-frames-based-on-row-values-in-python-pandas) – chrisckwong821
BTW, die 'set_index' call irgendwie kompliziert Dinge. Dies ist nicht erforderlich und Sie können den Join-Parameter für jeden Rahmen separat übergeben. So können Sie immer vermeiden, nach Index zu verbinden, wenn Sie z. 'reset_index()' – Quickbeam2k1