如何将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
相关产品推荐
相关产品推荐

