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

基于另一DataFrame的条件实现Pandas fillna的技术方案

需求说明与实现方案

原始数据

表1(待填充数据)

IDConditionAccess1Access2
1aanannan
2aanannan
3bbnannan
4bbnannan
5aanannan
6bbnannan
7aanannan

表2(权限映射表)

姓名ConditionAccessor1Accessor2
JohnaaYesNo
MaryaaNoYes
BobaaYesYes
BenbbYesYes
PeterbbNoYes

填充规则

  • 表1的Access1字段需匹配表2中同Condition且Accessor1为Yes的用户,Access2字段匹配同Condition且Accessor2为Yes的用户
  • 若某用户同时拥有两项权限(如Bob、Ben),可同时填入对应记录的Access1和Access2
  • 当同Condition的符合条件用户遍历完毕后,循环复用用户列表(如aa组的第3条记录ID=5,重新从John、Mary开始匹配)

预期结果表

IDConditionAccess1Access2
1aaJohnMary
2aaBobBob
3bbBenBen
4bbBenPeter
5aaJohnMary
6bbBenBen
7aaBobBob

Pandas实现方案

代码实现

import pandas as pd

# 构造原始数据
df1 = pd.DataFrame({
    'ID': [1,2,3,4,5,6,7],
    'Condition': ['aa','aa','bb','bb','aa','bb','aa'],
    'Access1': [pd.NA]*7,
    'Access2': [pd.NA]*7
})

df2 = pd.DataFrame({
    '姓名': ['John','Mary','Bob','Ben','Peter'],
    'Condition': ['aa','aa','aa','bb','bb'],
    'Accessor1': ['Yes','No','Yes','Yes','No'],
    'Accessor2': ['No','Yes','Yes','Yes','Yes']
})

# 为每个Condition生成可循环的权限用户列表
access1_candidates = df2[df2['Accessor1'] == 'Yes'].groupby('Condition')['姓名'].apply(list).to_dict()
access2_candidates = df2[df2['Accessor2'] == 'Yes'].groupby('Condition')['姓名'].apply(list).to_dict()

# 定义分组填充函数
def fill_group_records(group):
    cond = group['Condition'].iloc[0]
    a1_list = access1_candidates[cond]
    a2_list = access2_candidates[cond]
    group_len = len(group)
    # 生成循环索引(取模实现复用)
    a1_indices = [i % len(a1_list) for i in range(group_len)]
    a2_indices = [i % len(a2_list) for i in range(group_len)]
    # 填充对应字段
    group['Access1'] = [a1_list[idx] for idx in a1_indices]
    group['Access2'] = [a2_list[idx] for idx in a2_indices]
    return group

# 按Condition分组执行填充
result_df = df1.groupby('Condition', group_keys=False).apply(fill_group_records)

# 查看结果
print(result_df)

逻辑说明

  1. 从表2中筛选出符合Access1、Access2权限的用户,按Condition分组存储为可复用的列表字典
  2. 对表1按Condition分组后,通过取模运算为每组的每条记录生成循环索引,实现用户列表的循环复用
  3. 将索引对应的用户值批量填入表1的Access1和Access2字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:59:52