将pandas数据帧与重叠的列/行组合在一起

时间:2015-04-30 16:28:13

标签: python pandas

我正在寻找一种有效的方法来组合100个pandas数据帧,这些数据帧代表一个信息点网格。这些数据框中的每一个都是'点是唯一的,并且不与另一个点表示的点重叠,但它们在较大的拼凑空间上共享列和行。 即。

     1    2    3        4    5    6        7    8    9
A    df1, df1, df1,     df2, df2, df2,     df3, df3, df3
B    df1, df1, df1,     df2, df2, df2,     df3, df3, df3
C    df1, df1, df1,     df2, df2, df2,     df3, df3, df3

D    df4, df4, df4,     df5, df5, df5,     etc, etc, etc
E    df4, df4, df4,     df5, df5, df5,     etc, etc, etc
F    df4, df4, df4,     df5, df5, df5,     etc, etc, etc

熊猫'连接仅在列或行轴上组合,但不能同时在两者上组合。所以我一直试图增加数据框并使用df1.combine_first(df2)方法(无限重复)。

这是最好的方法,还是我应该注意另一种更有效的方法?

1 个答案:

答案 0 :(得分:2)

这里是对方便性和效率角度的快速猜测,基于非重叠的数据点并假设非常规则的数据(在这种情况下一切都是3x3)。

df1=pd.DataFrame( np.random.randn(3,3), index=list('ABC'), columns=list('123') )
df2=pd.DataFrame( np.random.randn(3,3), index=list('DEF'), columns=list('123') )
df3=pd.DataFrame( np.random.randn(3,3), index=list('ABC'), columns=list('456') )
df4=pd.DataFrame( np.random.randn(3,3), index=list('DEF'), columns=list('456') )

combine_first方式的优势在于您只需将所有内容转储到列表中而无需担心订单:

%%timeit
comb_df = pd.DataFrame()
for df in [df1,df2,df3,df4]:  
    comb_df = comb_df.combine_first( df )

100 loops, best of 3: 8.92 ms per loop

concat方式要求您按特定顺序对事物进行分组,但速度是原来的两倍:

%%timeit
df5 = pd.concat( [df1,df2], axis=0 )
df6 = pd.concat( [df3,df4], axis=0 )
df7 = pd.concat( [df5,df6], axis=1 )

100 loops, best of 3: 3.84 ms per loop

快速检查两种方式是否相同:

all( comb_df == df7 )
True