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

如何基于列重复Pandas DataFrame行?求内置方法实现方案

解决方案

你需要的是col1的所有值(包括重复项)和col2、col3的所有行(包括重复项)的笛卡尔积,用Pandas的内置方法就能实现,这里给你几种可行方案:

方法1:用merge做交叉合并

先拆分出col1的单列数据,再拆分出col2和col3的所有行,然后通过无关联条件的merge生成笛卡尔积:

# 拆分出col1列(保留所有重复值)
col1_df = df[['col1']]
# 拆分出col2和col3的所有行(保留原数据的重复行)
col23_df = df[['col2', 'col3']]

# 交叉合并生成笛卡尔积
df_new = col1_df.merge(col23_df, how='cross')

方法2:用itertools.product配合DataFrame构造

借助Python标准库的itertools.product生成所有组合,再转成DataFrame:

import itertools

# 生成col1每个值和col2-col3每一行的笛卡尔积
combinations = itertools.product(df['col1'], df[['col2', 'col3']].itertuples(index=False))

# 整理成目标格式的DataFrame
df_new = pd.DataFrame([(val, row[0], row[1]) for val, row in combinations], columns=['col1', 'col2', 'col3'])

方法3:Pandas 2.1+ 用cross_merge(最简洁)

Pandas 2.1.0及之后的版本新增了cross_merge函数,专门用来生成交叉合并结果,代码最直观:

df_new = df[['col1']].cross_merge(df[['col2', 'col3']])

验证重复行场景

针对你给出的含重复col1的示例,上面三种方法都能得到你预期的结果。比如用cross_merge处理:

df = pd.DataFrame({'col1': [1, 2, 2],
                   'col2': [4, 5, 6],
                   'col3': [7, 8, 8]})

df_new = df[['col1']].cross_merge(df[['col2', 'col3']])
print(df_new)

输出结果:

col1  col2  col3
0     1     4     7
1     1     5     8
2     1     6     8
3     2     4     7
4     2     5     8
5     2     6     8
6     2     4     7
7     2     5     8
8     2     6     8

所有方法都会保留原数据中的重复行,生成对应的交叉组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:12:34