Ich habe vier Pandas DataFrames (A
, B
, C
und). A
eine Reihe von Zeitmarken aufweist und eine einzige Spalte, die mit einer der anderen Datenrahmen bezeichnet:Bedingte Zusammenführung von anderen mehreren Pandas DataFrames
A
Timestamp Source
----------- ------
2012-4-3 B
2013-12-20 C
2012-3-5 C
2014-12-7 D
2012-7-10 B
...
Die anderen Datenrahmen mehr Daten enthalten:
B
Timestamp Foo Bar
----------- ---- ----
2012-1-1 1.5 1.3
2012-1-2 2.3 5.6
2012-1-3 3.4 3.3
...
2014-3-31 0.8 2.1
C
Timestamp Foo Bar
----------- ---- ----
2012-1-1 9.2 5.6
2012-1-2 4.8 7.6
2012-1-3 2.7 6.4
...
2014-3-31 7.0 6.5
D
Timestamp Foo Bar
----------- ---- ----
2012-1-1 6.8 4.2
2012-1-2 4.2 9.3
2012-1-3 5.5 0.7
...
2014-3-31 6.3 2.0
I aus A
einen einzelnen Datenrahmen konstruieren will, B
, C
und D
, die drei Säulen (Timestamp
, Foo
und Bar
), wobei die Werte von Foo
und Bar
aus dem entsprechenden 012.306.464 kommen hatim DataFrame aufgeführt als Source
in A
.
Nicht alle Zeitstempel in A
erscheinen in den drei anderen Datenrahmen, wobei in diesem Fall ich die Werte von Foo
möchte und Bar
np.nan
sein. Nicht alle Zeitstempel in B
, C
und erscheinen in A
und werden einfach nicht im endgültigen DataFrame angezeigt.
My aktuelle Ansatz ist durch jede Reihe in einer Schleife und zurück um die Werte aus dem entsprechenden Source
Datenrahmen:
srcs = {'B': B, 'C': C, 'D': D}
A['Foo'] = np.nan
A['Bar'] = np.nan
for i in range(len(A)):
ts = A.iloc[i].Timestamp
src = A.iloc[i].Source
A.iloc[i].Foo = srcs[src][srcs[src].Timestamp == ts].Foo
A.iloc[i].Bar = srcs[src][srcs[src].Timestamp == ts].Bar
hat sie eine effiziente sein, mehr Pandithic Weise, diese Aktion durchzuführen (?) ?
Hmm, würde ein Verfahren zur Herstellung einer Spalte Quelle hinzufügen zu Jedes df mit B, C, D auf B, C, D jeweils und dann alle von ihnen auf TimeStamp und Source zusammenführen, nicht sicher, wie chaotisch wäre es aber – EdChum
Würde dies nicht zu einem df mit 6 separaten Spalten führen (z.B. 'Foo_x', 'Bar_x', 'Foo_y', 'Bar_y', 'Foo', 'Bar')? Wie würde ich sie in zwei Spalten ("Foo" und "Bar") basierend auf der Quelle kombinieren? –