Python合并DataFrame两列为列表:label2非空则拼接适配MultiLabelBinarizer
实现方案
以下两种方法都可以生成符合要求的列表格式新列,可直接对接后续MultiLabelBinarizer处理逻辑。
方法1:行遍历实现(写法直观,适合中小数据量)
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame( data={"label1": [4, 0, 0, 2, 5], "label2": [np.nan, np.nan, np.nan, 3, np.nan]}, index=[5, 13, 18, 32, 33] ) # 核心合并逻辑 def gen_label3(row): if pd.isna(row["label2"]): return [row["label1"]] return [row["label1"], int(row["label2"])] df["label3"] = df.apply(gen_label3, axis=1)
方法2:向量化操作实现(性能更优,适合10万行以上大数据量)
# 先统一生成仅含label1的单元素列表 df["label3"] = df["label1"].map(lambda x: [x]) # 对label2非空的行追加label2值 not_null_mask = ~df["label2"].isna() df.loc[not_null_mask, "label3"] += df.loc[not_null_mask, "label2"].astype(int).map(lambda x: [x])
执行后输出的df结果和预期完全一致:
label1 label2 label3 5 4 NaN [4] 13 0 NaN [0] 18 0 NaN [0] 32 2 3.0 [2, 3] 33 5 NaN [5]
内容的提问来源于stack exchange,提问作者soulwreckedyouth
相关产品推荐
相关产品推荐

