You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas按两行一组交替合并两个DataFrame

如何使用Pandas按两行一组交替合并两个DataFrame

没问题,这需求用Pandas完全可以轻松实现!我给你两种实用的方法,一种好理解适合小数据场景,一种更高效适合大数据量,你可以按需选择~

首先先模拟你给出的两个DataFrame:

import pandas as pd
import numpy as np

# 你的第一个DataFrame
df1 = pd.DataFrame({'column_1': [1, 2, 3, 4]})
# 你的第二个DataFrame
df2 = pd.DataFrame({'column_1': [5, 6, 7, 8]})

方法一:分组拼接法(直观易懂)

思路很简单:先把两个DataFrame都按两行一组打上分组标签,然后依次把df1的每组和df2的对应组拼接起来,最后合并成结果。

# 给每个DataFrame添加分组标签:每两行归为一组
df1['group'] = np.arange(len(df1)) // 2
df2['group'] = np.arange(len(df2)) // 2

# 初始化空DataFrame存结果
result = pd.DataFrame()

# 遍历每个分组,依次拼接df1和df2的对应组
for group_num in df1['group'].unique():
    # 取出df1当前组的行
    part_df1 = df1[df1['group'] == group_num]
    # 取出df2当前组的行
    part_df2 = df2[df2['group'] == group_num]
    # 把这两部分拼到结果里
    result = pd.concat([result, part_df1, part_df2], ignore_index=True)

# 删掉辅助用的group列
result = result.drop('group', axis=1)

print(result)

运行后就能得到你想要的结果:

column_1
0         1
1         2
2         5
3         6
4         3
5         4
6         7
7         8

方法二:无循环高效法(适合大数据)

如果你的DataFrame行数很多,循环会有点慢,那可以试试这种不需要循环的方法,利用排序来实现交替拼接:

# 给每个DataFrame添加两个辅助列:组号、组内位置(0或1,代表是组内第一行还是第二行)
df1['group'] = np.arange(len(df1)) // 2
df1['pos'] = np.arange(len(df1)) % 2

df2['group'] = np.arange(len(df2)) // 2
df2['pos'] = np.arange(len(df2)) % 2

# 先把两个DataFrame合并到一起
combined = pd.concat([df1, df2])

# 按「组号」和「自定义位置优先级」排序:同一组内,先放df1的两行,再放df2的两行
result = combined.sort_values(
    by=['group', 'pos'],
    key=lambda x: x.map({0: 0, 1: 1}) if x.name == 'pos' else x
)

# 重置索引并删除辅助列
result = result.reset_index(drop=True).drop(['group', 'pos'], axis=1)

print(result)

运行后同样能得到目标结果,而且效率比循环高不少~

备注:内容来源于stack exchange,提问作者pinq-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 10:52:58