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

请求编写Pandas映射检查函数:校验Country与Bottle_Weight全映射

解决方案:基于首个国家校验Bottle_Weight映射情况

嘿,我来帮你搞定这个问题!看你给出的三个DataFrame案例,我完全明白你想要实现的逻辑——以第一个国家的Bottle_Weight唯一值作为基准,校验其他国家的重量映射情况:既要检查是否有基准重量没被其他国家覆盖,也要留意其他国家是否新增了基准外的重量。

先把你的数据初始化代码放出来,方便后续测试:

import pandas as pd

# 初始化三个测试DataFrame
data1 = [['India', 350], ['India', 600], ['Bangladesh', 350],['Bangladesh', 600]]
df1 = pd.DataFrame(data1, columns = ['Country', 'Bottle_Weight'])
data2 = [['India', 350], ['India', 600],['India', 200], ['Bangladesh', 350],['Bangladesh', 600]]
df2 = pd.DataFrame(data2, columns = ['Country', 'Bottle_Weight'])
data3 = [['India', 350], ['India', 600], ['Bangladesh', 350],['Bangladesh', 600],['Bangladesh', 200]]
df3 = pd.DataFrame(data3, columns = ['Country', 'Bottle_Weight'])

接下来是实现需求的函数,我给每一步都加了注释,方便你理解逻辑:

def check_bottle_mapping(df):
    # 获取所有唯一国家列表
    unique_countries = df['Country'].unique()
    if len(unique_countries) < 2:
        return "仅存在一个国家,无需校验映射情况"
    
    # 以第一个国家的Bottle_Weight唯一值作为基准集合
    base_country = unique_countries[0]
    base_weights = set(df[df['Country'] == base_country]['Bottle_Weight'].unique())
    
    result = []
    
    # 第一步:检查是否所有国家都覆盖了基准重量集合
    all_base_covered = True
    for country in unique_countries:
        country_weights = set(df[df['Country'] == country]['Bottle_Weight'].unique())
        if not base_weights.issubset(country_weights):
            all_base_covered = False
            break
    
    if all_base_covered:
        result.append("所有'Bottle_Weight'的唯一值均已与所有唯一Country完成映射")
    
    # 第二步:遍历其他国家,检查是否有基准外的新增重量
    for country in unique_countries[1:]:
        country_weights = set(df[df['Country'] == country]['Bottle_Weight'].unique())
        extra_weights = country_weights - base_weights
        if extra_weights:
            result.append(f"'{country}'映射了新值{', '.join(map(str, extra_weights))}")
    
    # 第三步:如果有国家没覆盖基准重量,补充提示缺失项
    if not all_base_covered:
        for country in unique_countries[1:]:
            country_weights = set(df[df['Country'] == country]['Bottle_Weight'].unique())
            missing_weights = base_weights - country_weights
            if missing_weights:
                result.append(f"'{country}'未与'Bottle_Weight'的{', '.join(map(str, missing_weights))}完成映射")
    
    # 把结果按换行拼接后返回
    return '\n'.join(result)

现在来测试这个函数,完全符合你想要的结果:

# 测试df1
print("df1的校验结果:")
print(check_bottle_mapping(df1))
# 输出:所有'Bottle_Weight'的唯一值均已与所有唯一Country完成映射

# 测试df2
print("\ndf2的校验结果:")
print(check_bottle_mapping(df2))
# 输出:'Bangladesh'未与'Bottle_Weight'的200完成映射

# 测试df3
print("\ndf3的校验结果:")
print(check_bottle_mapping(df3))
# 输出:
# 所有'Bottle_Weight'的唯一值均已与所有唯一Country完成映射
# 'Bangladesh'映射了新值200

这个函数的灵活性还不错,就算后续增加更多国家或者重量值,也能自动适配校验逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:57:54