我正在寻找一种有效的方法来组合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)方法(无限重复)。
这是最好的方法,还是我应该注意另一种更有效的方法?
答案 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