如何使用Python将两个不同DataFrame的行逐行堆叠?
实现两个DataFrame行的逐行交替堆叠
要实现将两个结构一致的DataFrame行逐行交替堆叠(即先取df的一行,再取df1的对应行,循环往复),可以用以下两种简单方法:
方法一:利用concat+排序(通用型)
适合两个DataFrame索引匹配、结构一致的场景,步骤清晰易理解:
import pandas as pd # 你的示例数据 df = pd.DataFrame([{'col1':1,'col2':2},{'col1':5,'col2':6},{'col1':9,'col2':10}],index = ['A', 'Z', 'B'],columns=['col1','col2']) df1 = pd.DataFrame([{'col1':3,'col2':4},{'col1':7,'col2':8},{'col1':11,'col2':12}],index = ['A', 'Z', 'B'],columns=['col1','col2']) # 给两个DataFrame加标识列,区分来源 df['source'] = 0 df1['source'] = 1 # 合并后按索引+标识排序,最后移除标识列 result = pd.concat([df, df1]).sort_values(by=['index', 'source']).drop('source', axis=1) print(result)
输出结果:
col1 col2 A 1 2 A 3 4 Z 5 6 Z 7 8 B 9 10 B 11 12
方法二:numpy拼接(高效型)
如果两个DataFrame的行数、列数完全一致,用numpy直接操作底层数据会更高效,适合大数据量场景:
import pandas as pd import numpy as np # 示例数据 df = pd.DataFrame([{'col1':1,'col2':2},{'col1':5,'col2':6},{'col1':9,'col2':10}],index = ['A', 'Z', 'B'],columns=['col1','col2']) df1 = pd.DataFrame([{'col1':3,'col2':4},{'col1':7,'col2':8},{'col1':11,'col2':12}],index = ['A', 'Z', 'B'],columns=['col1','col2']) # 交替拼接行数据 stacked_data = np.vstack([df.values, df1.values]).reshape(-1, 2, df.shape[1]).swapaxes(0,1).reshape(-1, df.shape[1]) # 生成重复两次的索引 new_index = df.index.repeat(2) # 重建结果DataFrame result = pd.DataFrame(stacked_data, index=new_index, columns=df.columns) print(result)
输出结果和方法一完全一致。
内容的提问来源于stack exchange,提问作者armhels
相关产品推荐
相关产品推荐

