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

如何将Pandas DataFrame列与另一DataFrame行匹配生成二进制矩阵

Pandas 字母匹配生成二进制标记DataFrame

假设我们有两个DataFrame:

  • df_base:列名为A到Z的DataFrame(仅需其列名结构)
  • df_letters:包含Letters列,每行是逗号分隔的字母字符串(如"A,C,D")或None

步骤1:预处理字母列

先把Letters列的内容转换成列表格式,同时将None值转为空白列表:

import pandas as pd

# 示例数据(替换为你的真实数据即可)
df_base = pd.DataFrame(columns=[chr(ord('A') + i) for i in range(26)])
df_letters = pd.DataFrame({
    'Letters': ['A,C,D', None, 'B,Z', 'X']
})

# 转换列格式,处理空值
df_letters['Letters_list'] = df_letters['Letters'].apply(
    lambda x: x.split(',') if pd.notna(x) else []
)

步骤2:生成二进制标记DataFrame

这里提供两种实用方法:

方法一:利用explode和get_dummies

适合快速生成标记,自动处理列对齐:

# 展开列表生成dummy列,按行聚合求和确保同一行的字母标记为1
dummy_df = df_letters['Letters_list'].explode().str.get_dummies().groupby(level=0).sum()

# 对齐A-Z列,缺失列填充0
result = dummy_df.reindex(columns=df_base.columns, fill_value=0)

方法二:直接遍历生成标记

逻辑更直观,便于自定义调整:

# 逐行判断每个字母是否存在,生成0/1列表
result = pd.DataFrame(
    [[1 if col in letter_list else 0 for col in df_base.columns] 
     for letter_list in df_letters['Letters_list']],
    columns=df_base.columns
)

最终result就是列名为A到Z、对应字母存在标记1、不存在标记0的目标DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:21:03