Python 使用生成器标记记录时保留ID引用

Python 使用生成器标记记录时保留ID引用,python,pandas,dataframe,token,generator,Python,Pandas,Dataframe,Token,Generator,我试图复制使用pandas描述的(非常酷的)数据匹配方法。目标是获取记录的组成部分(令牌),并用于与另一个df匹配 我一直在试图找出如何保留源ID并与单个令牌关联。希望这里有人能给我一个聪明的建议。我搜索了堆栈,但没有找到类似的问题 下面是一些示例数据和核心代码。这将获取数据帧,标记选择列,生成标记、标记类型和id(但id部分不起作用): 此代码生成正确的令牌,但为所有令牌生成Id值,而不是仅生成相应的Id值。我知道我这里的东西是错的,但我想不出一个方法来使用我的生成器函数。预期的产出将是: a

我试图复制使用pandas描述的(非常酷的)数据匹配方法。目标是获取记录的组成部分(令牌),并用于与另一个df匹配

我一直在试图找出如何保留源ID并与单个令牌关联。希望这里有人能给我一个聪明的建议。我搜索了堆栈,但没有找到类似的问题

下面是一些示例数据和核心代码。这将获取数据帧,标记选择列,生成标记、标记类型和id(但id部分不起作用):

此代码生成正确的令牌,但为所有令牌生成Id值,而不是仅生成相应的Id值。我知道我这里的东西是错的,但我想不出一个方法来使用我的生成器函数。预期的产出将是:

acme, name_tokens, 3
co, name_tokens, 3
inc, name_tokens, 3
buy, name_tokens, 6
cats, name_tokens, 6
here, name_tokens, 6
llc, name_tokens, 6
123, address_tokens, 3
hammond, address_tokens, 3
etc.

您需要更改
Id
的索引,而不是在专门的
for
循环中,但同时您需要获得一条新记录。我想提出如下建议:

def prepare_join_keys(df, tokenizers):
    for source_column, key_name, tokenizer in tokenizers:
        # for index in df.index:
        if source_column in df.columns:
            for index, record in enumerate(df[source_column]):
                if isinstance(record, float) is False:
                    for token in tokenizer(record):
                        yield (token, key_name, df.iloc[index]['Id'])

我意识到我在这里所做的就是为每个令牌添加来自df的Id列和索引。需要找到一种方法,只插入Id和每个相应的令牌。非常感谢!似乎枚举是我缺少的方法。
def prepare_join_keys(df, tokenizers):
    for source_column, key_name, tokenizer in tokenizers:
        # for index in df.index:
        if source_column in df.columns:
            for index, record in enumerate(df[source_column]):
                if isinstance(record, float) is False:
                    for token in tokenizer(record):
                        yield (token, key_name, df.iloc[index]['Id'])