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

使用Pandas实现多列分组后填充缺失人员名称的DataFrame

解决方案

你要实现的是将现有DataFrame中的V1/V2/V3唯一组合与完整的PN列表做笛卡尔积,不需要用groupby,用交叉连接的方式更直接:

步骤1:构造初始数据

import pandas as pd

# 原DataFrame
df = pd.DataFrame({
    'V1': [1, 2, 3],
    'V2': [10, 10, 10],
    'V3': [20, 21, 20],
    'PN': ['A', 'A', 'C']
})

# 完整的PN列表
pn_list = ['A', 'B', 'C', 'D', 'E']
pn_df = pd.DataFrame({'PN': pn_list})

步骤2:提取唯一的V1/V2/V3组合

先去掉原数据中的PN列,然后去重得到所有需要配对的键组合:

unique_groups = df.drop('PN', axis=1).drop_duplicates()

步骤3:执行交叉连接生成结果

用merge方法,指定how='cross'来实现笛卡尔积:

result = unique_groups.merge(pn_df, how='cross')

最终结果

运行后result就是你期望的输出:

V1  V2  V3 PN
0   1  10  20  A
1   1  10  20  B
2   1  10  20  C
3   1  10  20  D
4   1  10  20  E
5   2  10  21  A
6   2  10  21  B
7   2  10  21  C
8   2  10  21  D
9   2  10  21  E
10  3  10  20  A
11  3  10  20  B
12  3  10  20  C
13  3  10  20  D
14  3  10  20  E

补充说明

  • how='cross'是Pandas 1.2.0及以上版本支持的语法,如果版本较低,可以用unique_groups.assign(key=1).merge(pn_df.assign(key=1), on='key').drop('key', axis=1)来替代。
  • 这种方式比groupby更高效,因为本质是要生成所有键与PN的组合,而非分组聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:31:02