Pandas 将数组列转换为具有条件的多列

标签 pandas

我有一个包含 2 列的 Pandas 数据框:

  • 嵌入为数组列和嵌入大小 = size_of_embedding
  • 语言

  • 像这样:
    embedding              language
    [0.1 0.2 0.3]           fr
    [0.1 0.4 0.4]           en
    [0.8 0.1 0.1]           fr
    

    给定一个起始整数 n = 10,对于嵌入列的每个值,我想向上述数据框中添加一列,如下所示:
    embedding            language          feature1     feature2  feature3
    [0.1 0.2 0.3]          fr              10:0.1        11:0.2    12:0.3
    [0.1 0.4 0.4]          en              13:0.1        14:0.4    15:0.4
    [0.8 0.1 0.1]          fr              10:0.8        11:0.1    12:0.1
    

    所以,feature1 = 第一个嵌入值,feature2 = 第二个嵌入值......对于下一种语言,开始的特征值 = n+size_of_embedding:。
    因此,对于每种语言,添加的列数恰好等于 size_of_embedding 数组。对于遇到的每种下一种语言,我们从 n+size_of_embedding: 开始。有没有简单的方法来做到这一点?谢谢。

    最佳答案

    首先确保embedding column 实际上是一个数组。如果它存储为字符串,则可以将其转换为 numpy 数组,如下所示:

    df.embedding = df.embedding.apply(lambda x: np.fromstring(x[1:-1], sep=' '))
    

    创建语言及其起始值的查找列表,并使用它来生成
    特征
    lookup = {'fr': 10, 'en': 13}
    

    如果您有太多语言无法手动创建,您可以尝试以下语句,替换 10 & 3适合您的实际数据集
    lookup = {l:10+i*3 for i, l in enumerate(df.language.drop_duplicates().to_list())}
    

    生成特征只是一个查找和列表理解。这里我使用了辅助函数 f保持代码整洁。
    def f(lang, embeddings): 
        return [f'{lookup[lang]+i}:{e}' for i, e in enumerate(embedding)]
    
    new_names = ['feature1', 'feature2', 'feature3']
    df[new_names] = df.apply(lambda x: f(x.language, x.embedding), axis=1, result_type='expand')
    

    df 现在看起来像:
             embedding language feature1 feature2 feature3
    0  [0.1, 0.2, 0.3]       fr   10:0.1   11:0.2   12:0.3
    1  [0.1, 0.4, 0.4]       en   13:0.1   14:0.4   15:0.4
    2  [0.8, 0.1, 0.1]       fr   10:0.8   11:0.1   12:0.1
    

    关于 Pandas 将数组列转换为具有条件的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61690610/

    相关文章:

    python - 如何通过groupby Pandas中的条件达到所需的属性

    python - 高效更新 Pandas sql

    python - 从不同大小的 numpy 数组创建 pandas 数据框

    python - 查找具有与 id 匹配的最近时间戳的行,并添加具有值的行

    python - 如何比较两个数据帧的列并在它们在 Python Pandas 中匹配时产生结果

    python - 如何创建自己的方法并在 DataFrame 中使用它?

    python - pandas 仅针对正值和其他条件计算/显示数据帧 cumsum()

    python - 如何将数据帧行转换为一组对?

    python - Pandas 数组到列

    python - PANDAS Quantiles 根据我们的提问方式给出不同的答案