如何通过将列名映射到另一列行值实现两列合并?
问题:能否通过将列名映射到另一列的行值来合并两列?
示例DataFrame代码
import pandas as pd import numpy as np df = pd.DataFrame( { "id": [1, 1, 2, 3], "label": ["foo", "moo", "foo", "moo"], "foo.foo": ["foo", "foo", "foo", np.nan], "moo.moo": ["moo", "moo", np.nan, np.nan], } )
期望结果
id label foo.moo 0 1 foo foo 1 1 moo moo 2 2 foo foo
解决方案
可以通过按行匹配label值与对应列名的方式实现需求,核心思路是根据每行label的值,动态选取对应的目标列(如label为foo时选取foo.foo列),生成新列后过滤空值即可。
具体代码如下:
# 根据label动态匹配对应列的值,生成新列 df["foo.moo"] = df.apply(lambda row: row[f"{row['label']}.{row['label']}"], axis=1) # 筛选目标列并去除含空值的行 result = df[["id", "label", "foo.moo"]].dropna().reset_index(drop=True) print(result)
代码说明
- 使用
apply(axis=1)逐行处理数据,通过f"{row['label']}.{row['label']}"拼接出与当前行label对应的列名; - 将对应列的值赋值给新列
foo.moo; - 选取需要的三列,用
dropna()过滤掉foo.moo列为空的行,最后用reset_index(drop=True)重置索引。
内容的提问来源于stack exchange,提问作者Blob
相关产品推荐
相关产品推荐

