繁体   English   中英

将熊猫数据框与重叠的列/行组合

[英]Combining pandas data frames with overlapping columns / rows

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

     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)方法(无限重复)。

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

基于不重叠的数据点并假设非常规则的数据(在这种情况下为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM