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

如何在Python Pandas DataFrame中每3行合并列数据并为参与行重复合并结果

解决方案:按每3行分组合并并填充列

嘿,这个需求其实很好解决!你之前纠结没有现成的分组依据,那我们可以手动生成分组键,用DataFrame的索引就能轻松实现每3行一组的分组。接下来我一步步给你讲清楚怎么做:

完整实现代码

import pandas as pd

# 初始化你的DataFrame
test_list = pd.DataFrame()
test_list["Item"] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]
test_list["Number"] = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]
test_list["Combined Numbers"]= ""

# 关键步骤:生成每3行一组的分组键
group_key = test_list.index // 3

# 用groupby + transform实现组内合并并填充到每一行
test_list["Combined Numbers"] = test_list.groupby(group_key)["Number"].transform(
    lambda x: ", ".join(x)
)

# 查看结果
print(test_list)

代码解释

  1. 生成分组键:
    test_list.index // 3利用整数除法的特性,把索引0-2映射为0,3-5映射为1,6-8映射为2,9-10映射为3,自动把数据分成了每3行一组,完美匹配你的分组需求。

  2. 使用transform方法:
    这里不用groupby().agg()是因为agg只会返回每个组的单个结果,而transform会返回和原DataFrame行数一致的结果——每个组的所有行都会被填充该组合并后的字符串,正好满足你要给参与合并的每一行都填充对应结果的要求。

  3. 组内字符串合并:
    lambda x: ", ".join(x)把每个组的Number列值用逗号加空格连接起来,最后不足3个的组(比如最后两行)也会自动合并成"10, 11",完全符合你的预期。

预期输出

Item Number Combined Numbers
0     A      1        1, 2, 3
1     B      2        1, 2, 3
2     C      3        1, 2, 3
3     D      4        4, 5, 6
4     E      5        4, 5, 6
5     F      6        4, 5, 6
6     G      7        7, 8, 9
7     H      8        7, 8, 9
8     I      9        7, 8, 9
9     J     10         10, 11
10    K     11         10, 11

内容的提问来源于stack exchange,提问作者PythonLearner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:14:07