基于标签在同一数据帧中查找值并添加到新列(Vlookup)

2024-09-27 21:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张包含实验室结果的表格,包括“盲复制样本”。这些基本上是一个采样两次,其中第二个样本被赋予了一个不可描述的标签。相应的原始样品在一个单独的列中标明

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']]

我想在dataframe中添加一个列,该列保存来自原始示例的重复项的“值”。因此,一个新列(“原始值”),其中“Blank1”输入“A1-1”的值,对于“Blank2”输入“A1-4”的值,等等。对于“Duplicate”字段为空的行,这个新列也是空的。在

在excel中,使用Vlookup很容易实现,但我在Pandas中还没有看到一种简单的方法(也许除了将整个表与自身连接起来之外?)在


Tags: ofdflabelsa1样品标签实验室b1
2条回答

不是一个节省内存的答案,但这是有效的

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])

对于原始值中的其余值,它给出NaN。你可以决定用什么代替它。在

新列的类型不是整数,如果需要,也可以更改它。在

有了@jezrael评论,同样的事情可以做

^{pr2}$

以下是最简单的方法,用一行代码:

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

说明:

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

首先检查项是否为空字符串,如果是,则返回空字符串:

^{pr2}$

相当于:

if x == "" return ""

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

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

当条件df["Labels"] == x为真时,这个简单方法返回"Values"列中的值。如果您想知道.values[0]部分,它就在那里,因为.loc返回一个序列;在本例中,我们的序列只是一个值,所以我们只需使用.values[0]来获得它。在

相关问题 更多 >

    热门问题