如何在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)
代码解释
生成分组键:
test_list.index // 3利用整数除法的特性,把索引0-2映射为0,3-5映射为1,6-8映射为2,9-10映射为3,自动把数据分成了每3行一组,完美匹配你的分组需求。使用transform方法:
这里不用groupby().agg()是因为agg只会返回每个组的单个结果,而transform会返回和原DataFrame行数一致的结果——每个组的所有行都会被填充该组合并后的字符串,正好满足你要给参与合并的每一行都填充对应结果的要求。组内字符串合并:
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
相关产品推荐
相关产品推荐

