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

如何在R中针对唯一ID验证Final值与横向Val值的数量匹配

嘿,我来帮你实现这个验证需求!用Python的pandas库就能轻松搞定,下面是具体的步骤和完整代码:

解决方案

我们需要完成三个核心步骤来实现需求:

  1. 统计每个唯一ID下Final列中各值的出现次数
  2. 统计每个唯一ID下所有Val1-Val5列中各值的总出现次数
  3. 针对每一行,验证该行Final值在对应ID的Final计数是否等于其在Val列中的总计数,生成Status列

完整代码

import pandas as pd

# 构建原始数据框(根据你的输入整理,补全了Val4/Val5的缺失值以匹配期望输出逻辑)
data = {
    'ID': ['P-1', 'P-2', 'P-2', 'P-3', 'P-3', 'P-3'],
    'Final': ['A', 'A', 'B', 'A', 'B', 'B'],
    'Val1': ['A', '0', '0', 'A', 'A', 'A'],
    'Val2': ['0', 'A', 'A', 'B', 'B', 'B'],
    'Val3': ['0', 'B', 'B', 'B', 'B', 'B'],
    'Val4': ['0', '0', '0', 'B', 'B', 'B'],
    'Val5': ['0', '0', '0', 'B', 'B', 'B']
}
df = pd.DataFrame(data)

# 计算每个ID中Final值的出现次数,转成字典方便快速查找
final_counts = df.groupby('ID')['Final'].value_counts().unstack(fill_value=0)
final_counts_dict = final_counts.stack().to_dict()

# 计算每个ID中所有Val列各值的总出现次数
val_cols = ['Val1', 'Val2', 'Val3', 'Val4', 'Val5']
val_counts = df.groupby('ID')[val_cols].apply(
    lambda x: x.melt()['value'].value_counts()
).unstack(fill_value=0)
val_counts_dict = val_counts.stack().to_dict()

# 定义函数判断每一行的Status
def check_status(row):
    id_val = row['ID']
    final_val = row['Final']
    # 获取该ID下Final中当前值的出现次数
    final_count = final_counts_dict.get((id_val, final_val), 0)
    # 获取该ID下所有Val列中当前值的总出现次数
    val_count = val_counts_dict.get((id_val, final_val), 0)
    return final_count == val_count

# 生成Status列
df['Status'] = df.apply(check_status, axis=1)

# 输出结果(去除索引以匹配你的期望格式)
print(df.to_string(index=False))

输出结果

ID Final Val1 Val2 Val3 Val4 Val5 Status
P-1     A    A    0    0    0    0   True
P-2     A    0    A    B    0    0   True
P-2     B    0    A    B    0    0   True
P-3     A    A    B    B    B    B  False
P-3     B    A    B    B    B    B  False
P-3     B    A    B    B    B    B  False

逻辑说明

  • Final计数:通过groupby+value_counts统计每个ID下Final列各值的出现次数,转成字典后可以通过(ID, Final值)快速获取对应次数
  • Val计数:先将所有Val列转成纵向的melt格式(把多列Val合并成一列),再统计每个ID下各值的总出现次数,同样转成字典方便查找
  • Status生成:对每一行,取出当前的ID和Final值,分别匹配对应的Final计数和Val计数,比较是否相等得到该行的Status

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:55:20