【问题标题】:Reset a group of identifiers to a sequence of consecutive serial numbers in a Pandas dataframe column将一组标识符重置为 Pandas 数据框列中的一系列连续序列号
【发布时间】:2021-10-21 12:10:01
【问题描述】:

我已经从一个数据框生成了三个输出,我正在尝试通过从每个输出的 1 开始来重置我的句子的标识符 (Sentence_ID)。

输出示例:

Sentence_ID  Mention Tag
6388    Chailland   B-LOCATION
6388    ,   O
6388    Mayenne B-LOCATION

6389    poste   O
6389    de  O
6389    Goumois B-LOCATION
6389    (   I-LOCATION
6389    Doubs   I-LOCATION
6389    )   I-LOCATION
6389    .   O
        
6390    Pichet  B-PERSON
6390    (   O
6390    veuve   O
6390    )   O
6390    ,   O
6390    de  O
6390    Paris   B-LOCATION
6390    .   O
... continue

预期输出:

Sentence_ID  Mention Tag
1 Chailland B-LOCATION
1   ,   O
1   Mayenne B-LOCATION

2   poste   O
2   de  O
2   Goumois B-LOCATION
2   (   I-LOCATION
2   Doubs   I-LOCATION
2   )   I-LOCATION
2   .   O
        
3   Pichet  B-PERSON
3   (   O
3   veuve   O
3   )   O
3   ,   O
3   de  O
3   Paris   B-LOCATION
3   .   O
... continue

我一定是遗漏了一些东西,但不确定是否应该在 Sentence_id 列(通过 group_by())或 reset_index 在此特定列上应用计数器以完成此任务。

如果有人有线索,请提前致谢。

【问题讨论】:

    标签: python python-3.x pandas nlp


    【解决方案1】:

    您可以使用pd.factorize生成一组新的序列号,如下:

    df['Sentence_ID'] = pd.factorize(df['Sentence_ID'])[0] + 1
    

    或使用Series.factorize

    df['Sentence_ID'] = df['Sentence_ID'].factorize()[0] + 1
    

    结果:

    print(df)
    
    
        Sentence_ID    Mention         Tag
    0             1  Chailland  B-LOCATION
    1             1          ,           O
    2             1    Mayenne  B-LOCATION
    3             2      poste           O
    4             2         de           O
    5             2    Goumois  B-LOCATION
    6             2          (  I-LOCATION
    7             2      Doubs  I-LOCATION
    8             2          )  I-LOCATION
    9             2          .           O
    10            3     Pichet    B-PERSON
    11            3          (           O
    12            3      veuve           O
    13            3          )           O
    14            3          ,           O
    15            3         de           O
    16            3      Paris  B-LOCATION
    17            3          .           O
    

    【讨论】:

    • 完美运行!谢谢你。一开始我不明白为什么我丢失了句子之间的空格,但经过测试它可以工作。
    • @Lter 这个解决方案只影响Sentence_ID 列。也许我将您的示例数据用作 3 列而不是 2 列,第二列带有空格。无论如何,这只是为了演示目的。其他列不会受到影响。
    【解决方案2】:

    您可以创建一个字典,其键是旧 ID,值是新 ID,并使用它来映射新的 Sentence_ID

    mapping = dict(zip(df["Sentence_ID"].unique(), range(1, df["Sentence_ID"].nunique() +1)))
    df["Sentence_ID"] = df["Sentence_ID"].map(mapping)
    

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多