我有四个熊猫数据框(A
,B
,C
和D
)。 A
具有一系列时间戳和一个列,其指的是其他DataFrames之一:其他多个熊猫数据框的条件合并
A
Timestamp Source
----------- ------
2012-4-3 B
2013-12-20 C
2012-3-5 C
2014-12-7 D
2012-7-10 B
...
另一DataFrames容纳更多的数据:
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
我想从A
构造单个数据帧,其中Foo
和Bar
的值来自相应的在DataFrame中的列为Source
的A
。
并非所有的时间戳出现A
在其他三个DataFrames,在这种情况下,我想的Foo
和Bar
值是np.nan
。并非B
,C
和D
中的所有时间戳都出现在A
中,并且不会出现在最终的DataFrame中。
我目前的做法是遍历A中的每个行并从相应Source
数据框返回值:
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
必须有一个更高效,更Pandithic的方式来执行此操作(?) ?
嗯,一个方法是将源列添加到每个df与B,C,D分别设置为B,C,D,然后合并所有的时间戳和来源,不知道如何凌乱它会通过 – EdChum
这不会导致与6个单独的列(例如'Foo_x','Bar_x','Foo_y','Bar_y','Foo','酒吧')的DF?我将如何将它们合并到两个列('Foo'和'Bar')的基础上? –