【问题标题】:Groupby and Apply Functions on multiple Columns with 1-to-many relationship具有一对多关系的多列上的 Groupby 和 Apply 函数
【发布时间】:2021-11-09 18:18:28
【问题描述】:

我正在尝试在我的数据集中整合一对多关系,同时为每个项目(有时是多个项目)创建链接。对于给定的工单,可以有 1 个或多个工单,因此我使用以下内容在单个列中合并和列出工单:

df = df.groupby(['Date', 'Ticket ID', 'Score', 'many other Columns...'])['Work Order'].apply(', '.join).reset_index()

这给了我一个很好的输出,其中工作订单要么单独列出,要么以逗号分隔,如下所示:

Date                        Ticket ID           Work Order
2018-08-30 22:52:25         1444008             119846184
2021-09-29 13:33:49         1724734             122445397, 122441551

现在,我还想为工单创建同样以逗号分隔的链接。对于单个工单,以下工作正常:

woLink = r'www.google.com/woNum='
df['WO Link'] = woLink + df['Work Order'].astype(str)

但是对于倍数,它基本上撤消了 groupby 并重新添加了我分组的行。从上面的示例数据来看:

# Wrong
Date                        Ticket ID           Work Order           Link
2018-08-30 22:52:25         1444008             119846184            google.com/woNum=119846184
2021-09-29 13:33:49         1724734             122445397            google.com/woNum=122445397
2021-09-29 13:33:49         1724734             122441551            google.com/woNum=122441551

我想要的是:

Date                        Ticket ID           Work Order           Link (s)
2018-08-30 22:52:25         1444008             119846184            google.com/woNum=119846184
2021-09-29 13:33:49         1724734             122445397, 122441551 google.com/woNum=122445397, google.com/woNum=122441551

我尝试了几种不同的 Groupby/apply 变体,例如重新组合但没有成功:

df = df.groupby(['Date', 'Ticket ID', 'Score', 'many other Columns...'])['Link'].apply(', '.join).reset_index()

它似乎总是再次重复该行 - 我知道这是因为 WO 和 WOLink 都有一个 1 到多个,但我似乎不知道如何同时处理这两个。

如何分组和合并此数据框?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    您可以使用正则表达式来添加 URL 部分:

    woLink = r'example.org/woNum='
    df['Link'] = df['Work Order'].str.replace('(\d+)', rf'{woLink}\1')
    

    输出:

                      Date  Ticket ID            Work Order                                                      Link
    0  2018-08-30 22:52:25    1444008             119846184                               example.org/woNum=119846184
    1  2021-09-29 13:33:49    1724734  122445397, 122441551  example.org/woNum=122445397, example.org/woNum=122441551
    

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 2017-10-20
      • 2014-06-13
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多