繁体   English   中英

基于标签在同一数据框中的查找值,然后添加到新列(Vlookup)

[英]Lookup value in the same dataframe based on label and add to a new column (Vlookup)

我有一张表格,其中包含实验室结果,包括“盲目重复样品”。 这些基本上是两次采样的样本,第二个样本被赋予了非描述性标签。 相应的起源 样品在单独的栏中显示

Labels = ['A1-1', 'A1-2', 'A1-3', 'A1-4','B1-2', 'B1-3', 'B1-4', 'B1-5', 'Blank1', 'Blank2', 'Blank3']
Values = [8356532   ,7616084,5272477, 5076012, 411851,  415258, 8285777, 9700884, 9192185, 4466890,830516]
Duplicate_of = ['','','','','','','','','A1-1', 'A1-4', 'B1-3']
d = {'Labels': Labels, 'Values': Values, 'Duplicate_of' : Duplicate_of}
df = pd.DataFrame(data=d)
df = df[['Labels','Values','Duplicate_of']]

我想在数据框中添加一列,其中包含原始样本中重复项的“值”。 因此,新建了一个列(“ Original_value”),其中对于“ Blank1”输入了“ A1-1”的值,对于“ Blank2”输入了“ A1-4”的值,等等。对于其中“ Duplicate_of”的行字段为空,此新列也为空。

在excel中,使用Vlookup非常容易,但是在Pandas中我还没有看到一种简便的方法(也许除了将整个表自身连接起来以外?)

不是有效的记忆答案,但这可行

import numpy as np
dictionary = dict(zip(Labels, Values))
df["Original_value"] = df["Duplicate_of"].map(lambda x: np.nan if x not in dictionary else dictionary[x])

对于Original_Value中的其余值,它给出NaN。 您可以决定要替代什么。

新列的类型将不是整数,也可以根据需要进行更改。

用@jezrael注释可以完成与

import numpy as np
dictionary = dict(zip(Labels, Values))
df["Original_value"] = df["Duplicate_of"].map(dictionary)

在一行中,这是最简单的方法:

df["Original_value"] = df["Duplicate_of"].apply(lambda x: "" if x == "" else df.loc[df["Labels"] == x, "Values"].values[0])

说明:

这只是将lambda函数应用于"Duplicate_of"列的每个元素

首先,我们检查该项目是否为空字符串,如果是,则返回一个空字符串:

"" if x == ""

等效于:

if x == "" return ""

如果不是空字符串,则执行以下命令:

df.loc[df["Labels"] == x, "Values"].values[0]

当条件df["Labels"] == x为true时,此简单返回"Values"列中的"Values" 如果您想知道.values[0]部分,那是因为.loc返回一个序列; 在这种情况下,我们的系列只是一个值,因此我们只需使用.values[0]即可获得它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM