【问题标题】:De-aggregating a string-valued field in Pandas [duplicate]在 Pandas 中取消聚合字符串值字段 [重复]
【发布时间】:2018-08-16 05:51:57
【问题描述】:

是否可以基于字符串字段对 Pandas 数据框进行去聚合(或去连接),该字符串字段包含您现在希望看到的项目的分隔列表?类似于在进行关系数据建模时将数据集转换为 1NF。

例如,有没有一种直接的方法可以做到这一点:

Name    Projects
Joe     ProjectA, ProjectB
Mary    ProjectC, ProjectD, Project E

并将其转换为:

Name    Projects
Joe     ProjectA
Joe     ProjectB
Mary    ProjectC
Mary    ProjectD
Mary    ProjectE

【问题讨论】:

  • 错误的重复...找到更好的

标签: python pandas concatenation


【解决方案1】:

这是一种方法。

df = pd.DataFrame({'Name': ['Joe', 'Mary'],
                   'Projects': [['ProjectA', 'ProjectB'],
                                ['ProjectC', 'ProjectD', 'ProjectE']]})

lens = list(map(len, df['Projects'].values))

res = pd.DataFrame({'name': np.repeat(df['Name'], lens),
                    'Projects': np.concatenate(df['Projects'].values)})

#    Projects  name
# 0  ProjectA   Joe
# 0  ProjectB   Joe
# 1  ProjectC  Mary
# 1  ProjectD  Mary
# 1  ProjectE  Mary

【讨论】:

  • 不错!我不知道用于克隆记录的repeat 函数。但是,在我原来的示例中,Projects 字段是字符串值,例如第一条记录的值为'ProjectA, ProjectB'。您是否只是创建一个影子字段,将该字符串拆分为一个列表值,然后应用上述方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 2020-11-09
相关资源
最近更新 更多