在python中按id值匹配行

在python中按id值匹配行,python,pandas,data-cleaning,Python,Pandas,Data Cleaning,我需要通过一个唯一的ID号来匹配数据库中的联系人。我在下面创建了一个非常小的模拟数据框来帮助您提出建议: data = [ ["email", "emailperson1@email.com", 1], ["phone", "555-555-1111", 1], ["slack", "secondpersonslack", 2], ["phone", "111-111-1111", 3], ] data2 = [ [1, "emailperson1@em

我需要通过一个唯一的ID号来匹配数据库中的联系人。我在下面创建了一个非常小的模拟数据框来帮助您提出建议:

data = [
    ["email", "emailperson1@email.com", 1],
    ["phone", "555-555-1111", 1],
    ["slack", "secondpersonslack", 2],
    ["phone", "111-111-1111", 3],
]

data2 = [
    [1, "emailperson1@email.com", "555-555-1111", "slack1"],
    [2, "emailperson2@gmail.com", "555-555-2222", "secondpersonslack"],
    [3, "tomasconticello@gmail.com", "111-111-1111", "tomasslack"],
]

stackdata = pd.DataFrame(
    data, columns=["contact method", "from:", "column that I dont know how to make"]
)
stackdata2 = pd.DataFrame(data2, columns=["id", "email", "phone", "slack"])
在我的真实数据集中,我想填写的是“我不知道如何制作的列”

所以,以第一行stackdata中的第一个联系人方法为例,这是一个电子邮件地址。此电子邮件与stack2中的ID 1对齐,因此它将用“1”填充stackdata1中的列

我在想某种for循环,比如:

for i in stackdata['column that I dont know how to make']:
  if i matches one of the columns in any row, then populate column with id of that row

谢谢你的帮助,如果我能让这个问题更容易回答,请告诉我

一种方法是
将第二个数据帧中的contact-method列融化为一个列,然后
将结果与第一个数据帧合并。默认情况下,pandas在左侧和右侧的任何和所有相同命名列上合并。(:“如果未传递on且左索引和右索引为False,则数据帧和/或序列中列的交点将被推断为联接键。”)


一种方法是
将第二个数据帧中的contact method列融化为一个列,然后
将结果与第一个数据帧合并。默认情况下,pandas在左侧和右侧的任何和所有相同命名列上合并。(:“如果未传递on且左索引和右索引为False,则数据帧和/或序列中列的交点将被推断为联接键。”)

试试这个:

for i in range(len(stackdata)):
    stackdata['contact_id'][i] = str(stackdata2[(stackdata2['email'] == stackdata['from:'][i]) | (stackdata2['phone'] == stackdata['from:'][i]) | (stackdata2['slack'] == stackdata['from:'][i])]['id'].values).strip('[]')
'contact\u id'
是我不知道如何制作的列
'column'

试试这个:

for i in range(len(stackdata)):
    stackdata['contact_id'][i] = str(stackdata2[(stackdata2['email'] == stackdata['from:'][i]) | (stackdata2['phone'] == stackdata['from:'][i]) | (stackdata2['slack'] == stackdata['from:'][i])]['id'].values).strip('[]')

'contact\u id'
是我不知道如何制作的
'栏目

谢谢您的回答!但问题的一部分在于,每种接触方法的标签并不总是准确的。就像松弛的接触可能是“信息”。所以融化会错过很多思考。也许我们可以和任何类似的专栏相匹配。那怎么办?嗯。。。我知道没有开箱即用的方式,尽管这看起来很有趣:谢谢你的回答!但问题的一部分在于,每种接触方法的标签并不总是准确的。就像松弛的接触可能是“信息”。所以融化会错过很多思考。也许我们可以和任何类似的专栏相匹配。那怎么办?嗯。。。据我所知,没有现成的方式,尽管这看起来很有趣: