【问题标题】:Converting pandas df containing rownames, columnnames and frequency to Term Document Matrix将包含行名、列名和频率的 pandas df 转换为术语文档矩阵
【发布时间】:2016-11-13 05:12:36
【问题描述】:

我有一个格式如下的 pandas df: 输入:

 Freq Document  TermId
  3     A      112
  5     A      055
  1     C      003
  4     D      001
  2     B      003
  1     D      089

我想将此数据框转换为术语文档矩阵(最好是另一个 pandas df)。实现这一目标的最有效方法是什么?

Ex 输出:

Term/Document  A  B  C  D
    001        0  0  0  4
    003        0  2  1  0
    055        5  0  0  0
    089        0  0  0  1
    112        3  0  0  0

【问题讨论】:

    标签: python numpy pandas scikit-learn nltk


    【解决方案1】:

    请注意,所需的 DataFrame 有一个索引,其标签来自 df['TermId'],其列标签来自 df['Document']。每当索引和列标签来自df 的列时,请考虑使用df.pivot(如果需要聚合,则使用df.pivot_table):

    import pandas as pd
    df = pd.DataFrame({'Document': ['A', 'A', 'C', 'D', 'B', 'D'],
                       'Freq': ['3', '5', '1', '4', '2', '1'],
                       'TermId': ['112', '055', '003', '001', '003', '089']})
    result = df.pivot(index='TermId', columns='Document', values='Freq').fillna(0)
    print(result)
    

    产量

    Document  A  B  C  D
    TermId              
    001       0  0  0  4
    003       0  2  1  0
    055       5  0  0  0
    089       0  0  0  1
    112       3  0  0  0
    

    【讨论】:

    • 谢谢! df.pivot_table 对我有用,因为原始 df 中的 TermId 列有重复
    猜你喜欢
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2011-10-15
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多