首页 > 解决方案 > python3.7 & pandas - 使用行中的列值作为查找值返回不同的列值

问题描述

我遇到了一个棘手的情况 - 对我来说很棘手,因为我真的是 python 新手。我在 pandas 中有一个数据框,我需要通过构建一个新列来逻辑我的方式,该列稍后将用于来自不同源的数据匹配。基本上,图片说明了我无法弄清楚的事情。

对于任何 LOW 标签,我需要检索它们的 MID_LEVEL 标签并将其复制到新列。DESIRED OUTPUT 列是我需要创建的。

您可以看到 LABEL_PATH 的格式设置为我可以使用前 9 位数字作为“查找”来查找相应的 LABEL,但我不知道如何实现这一点。例如,对于 LABEL_PATH 以“0.02.0004”开头的任何行,所需的输出需要是“MID_LEVEL1”。

该数据集有大约 25k 行,因此也希望避免行迭代。

任何帮助将不胜感激!

在此处输入图像描述

标签: python-3.xpandasdataframe

解决方案


选择与您类似的示例:

df = pd.DataFrame({"a":["1","1.1","1.1.1","1.1.2","2"],"b":range(5)})

df["c"] = np.nan
mask = df.a.apply(lambda x: len(x.split(".")) < 3)
df.loc[mask,"c"] = df.b[mask]
df.c.fillna(method="ffill", inplace=True)

大多数魔法发生在mask定义的行中,但这并不难:如果 in 的值a被分成少于 3 个部分(即,最多有一个点),则将其标记为True,否则不标记。

使用该掩码复制值,然后用上面的有效值填充未指定的值。


推荐阅读