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

在R中基于条件识别值:为2300万行数据生成LP列

解决方案:为2300万行CSV生成LP列

针对你处理超大规模CSV的需求,以下是几种高效可行的方案,覆盖Python、SQL、命令行工具三种场景:

方案一:Python Pandas/Dask(本地大数据处理)

适合具备基础Python能力的场景,Pandas适合内存足够的情况,Dask则针对内存不足的并行处理需求。

内存充足时用Pandas

import pandas as pd

# 读取CSV文件
df = pd.read_csv("your_dataset.csv")

# 分组统计每个N_AIH对应的IDENT取值集合
n_aih_ident_map = df.groupby("N_AIH")["IDENT"].unique()
# 生成YES/NO映射规则
lp_rule = n_aih_ident_map.apply(lambda x: "YES" if {1,5}.issubset(x) else "NO")

# 将规则映射回原数据集
df["LP"] = df["N_AIH"].map(lp_rule)

# 保存结果
df.to_csv("result_with_lp.csv", index=False)

内存不足时用Dask(并行分片处理)

import dask.dataframe as dd

# 以分片方式读取CSV
df = dd.read_csv("your_dataset.csv")

# 分组统计每个N_AIH是否包含1和5
n_aih_flags = df.groupby("N_AIH")["IDENT"].apply(
    lambda x: "YES" if {1,5}.issubset(x.unique()) else "NO",
    meta=("LP", "object")
).reset_index()

# 合并规则与原数据
df = df.merge(n_aih_flags, on="N_AIH")

# 保存结果(Dask会生成多个分片文件,可自行合并)
df.to_csv("result_lp_*.csv", index=False)

方案二:SQL(数据库端处理)

若你已将CSV导入数据库(如MySQL、PostgreSQL),可通过以下高效SQL语句实现,避免之前可能的写法错误:

高效分组关联写法

WITH n_aih_check AS (
    SELECT 
        N_AIH,
        -- 标记该N_AIH是否存在IDENT=1
        MAX(CASE WHEN IDENT = 1 THEN 1 ELSE 0 END) AS has_1,
        -- 标记该N_AIH是否存在IDENT=5
        MAX(CASE WHEN IDENT = 5 THEN 1 ELSE 0 END) AS has_5
    FROM your_table
    GROUP BY N_AIH
)
SELECT 
    t.N_AIH,
    t.IDENT,
    CASE WHEN nc.has_1 = 1 AND nc.has_5 = 1 THEN 'YES' ELSE 'NO' END AS LP
FROM your_table t
JOIN n_aih_check nc ON t.N_AIH = nc.N_AIH;

简易EXISTS写法(适合小数据集参考)

SELECT 
    N_AIH,
    IDENT,
    CASE
        WHEN EXISTS (SELECT 1 FROM your_table t2 WHERE t2.N_AIH = t.N_AIH AND t2.IDENT = 1)
             AND EXISTS (SELECT 1 FROM your_table t2 WHERE t2.N_AIH = t.N_AIH AND t2.IDENT = 5)
        THEN 'YES'
        ELSE 'NO'
    END AS LP
FROM your_table t;

方案三:命令行Awk(无编程基础快速处理)

适合Linux/macOS或Windows WSL环境,无需额外安装工具:

  1. 创建名为lp_rule.awk的脚本文件:
BEGIN { FS=","; OFS="," }
# 处理表头
NR == 1 { print $0, "LP"; next }
# 第一次遍历记录每个N_AIH的IDENT情况
{
    if (!($1 in has_1)) has_1[$1] = 0
    if (!($1 in has_5)) has_5[$1] = 0
    if ($2 == 1) has_1[$1] = 1
    if ($2 == 5) has_5[$1] = 1
    lines[NR] = $0
}
# 第二次遍历生成LP列
END {
    for (i=2; i<=NR; i++) {
        split(lines[i], arr, ",")
        n_aih = arr[1]
        print lines[i], (has_1[n_aih] && has_5[n_aih] ? "YES" : "NO")
    }
}
  1. 运行命令处理CSV:
awk -f lp_rule.awk your_dataset.csv > result_with_lp.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:05:25