繁体   English   中英

将元组列表与 dataframe 中的列进行比较

[英]Compare list of tuples against column in dataframe

我正在学习 pandas 并且有一个我无法解决的问题。

我有一个 dataframe 大约有 200k 行,是 id 的列之一。 它看起来像这样:

    call_id id      utterance   channel  seq    sentiment
0     uuid            str         str    str      float

我还有一个具有这种形状的元组列表:

(id, pattern_id)
tup = [('c638b6fe-0939-4a3b-a7f0-c9b315da1e5d', '56e1542f-5d68-4fe0-a85a-cce8ae1f0b94'),...]

作为这些元素字符串。

我想将 dataframe 的每一行中的 id 与元组列表中的 id 进行比较,如果匹配,请将匹配元组的 pattern_id 添加到 dataframe 中的新列中。 元组列表的长度不等于 dataframe 中的行数。

我尝试了不同的方法,但其中任何一个都很好。 看来我可以进行比较,例如:

matches = []
for row in df.itertuples():
    for t in tuples:
        if row.id == t[0]:
            matches.append(t[1])

我得到了我必须得到的比赛。 但是如果我添加一个 else 比较似乎不起作用:

matches = []
for row in df.itertuples():
    for t in tuples:
        if row.id == t[0]:
            matches.append(t[1])
        else:
            matches.append("nan")

我将不胜感激任何帮助理解:

  • 为什么这不起作用
  • 如何将每行比较的结果添加到 dataframe 中的新列。

谢谢!

您可以从元组列表中创建一个 dataframe,如下所示: df = pd.DataFrame(list_of_tuples, columns =['id', 'pattern_id'])然后将其与主joined = main_df.merge(df, on='id', how='inner')连接,如下所示: joined = main_df.merge(df, on='id', how='inner') 对于id匹配的行, pattern_id包含在joined中。

暂无
暂无

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

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