【问题标题】:Optimization of map, in grouped by object地图优化,按对象分组
【发布时间】:2023-01-30 22:23:38
【问题描述】:

我有以下数据框

test_df = pd.DataFrame({'Category': {0: 'product-availability address-confirmation input',
  1: 'registration register-data-confirmation options',
  2: 'onboarding return-start input',
  3: 'registration register-data-confirmation input',
  4: 'decision-tree first-interaction-validation options'},
 'Original_UserId': {0: '5511949551865@wa.gw.msging.net',
  1: '5511949551865@wa.gw.msging.net',
  2: '5511949551865@wa.gw.msging.net',
  3: '5511949551865@wa.gw.msging.net',
  4: '5511949551865@wa.gw.msging.net'}})

感谢 jezrael 我正在应用下面的地图,它遵循这个问题After certain string is found mark every after string as true,pandas 中给出的逻辑

test_df.groupby('Original_UserId',observed=True)['Category'].apply(lambda s : s.eq('onboarding return-start input').cummax())

返回以下系列

pd.Series({0: False, 1: False, 2: True, 3: True, 4: True})

问题是当我将此条件应用于更大的数据集时,运行此代码需要相当长的时间。关于如何优化的任何线索?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先比较列Category,然后每列Original_UserId使用GroupBy.cummax

    s = (test_df['Category'].eq('onboarding return-start input')
                            .groupby(test_df['Original_UserId'],observed=True)
                            .cummax())
    print (s)
    0    False
    1    False
    2     True
    3     True
    4     True
    Name: Category, dtype: bool
    

    另一个想法是创建辅助列:

    s = (test_df.assign(tmp = test_df['Category'].eq('onboarding return-start input'))
                .groupby('Original_UserId',observed=True)['tmp']
                .cummax())
    print (s)
    

    【讨论】:

    • 难道你不认为你应该更新你以前的答案并将其作为一个骗局关闭(仅针对observed=True)吗? :-)
    • @Corralien - 之前的答案不是针对每个组的。
    • 你最后的评论:“”“@INGl0R1AM0R1 - 然后使用 df['col'].eq('onboarding return-start origin').groupby(df['group']).cummax()“””
    • @Corralien - 我添加答案是因为在这个问题中没有使用我的评论解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2018-06-18
    • 2015-10-17
    • 1970-01-01
    • 2019-05-15
    • 2011-08-01
    • 2015-03-25
    相关资源
    最近更新 更多