【问题标题】:How do I bin repetitive patterns?如何对重复模式进行分类?
【发布时间】:2019-05-15 10:23:59
【问题描述】:

在我的 Dataframe 中,我有一个字段显示超时订购的产品的状态。这可以是“新”、“已取消”、“已填充”或“部分”。我总结了记录的每个 Order(Orderid) 的模式,并对可能出现的不同模式进行了计数。然而,这导致了超过 1385 种不同的模式。我现在想将这些模式压缩到 bin 中,例如,如果订单状态为:New、New、Cancelled、New、Filled,则将压缩为:New、Cancelled、New、Filled。

这将与以下模式放在同一个 bin 中:New、New、New、Cancelled、Cancelled、New、New、Filled。

这是原始数据的样子:

按每个 OrderID 分组一次:

为了查看数据中存在的 OrderStatus 模式,应用了以下代码:

def status_transition_with_timestamp(each_grouped_df):
    sorted_df = each_grouped_df.sort_values('timestamp', ascending=True)
    concatenated_transition = ','.join(sorted_df['ostatus'])
    return concatenated_transition

result = df_grouped['ostatus'].agg(status_transition_with_timestamp)

result.groupby('ostatus').count()

导致:Output of counts

【问题讨论】:

    标签: python jupyter-notebook


    【解决方案1】:

    要删除连续重复,请使用itertools.groupby:

    from itertools import groupby
    df['ostatus'] = df['ostatus'].apply(lambda x: ','.join([x for x, _ in groupby(x.split(','))]))
    

    然后您将拥有唯一的序列并且您可以执行聚合。

    例子:

    df = pd.DataFrame({'Status': ['New,New,Cancelled', 'New,Cancelled', 'Cancelled,New,Cancelled,New']})
    df
    #                        Status
    #0            New,New,Cancelled
    #1                New,Cancelled
    #2  Cancelled,New,Cancelled,New
    
    df['Status'] = df['Status'].apply(lambda x: ','.join([x for x, _ in groupby(x.split(','))]))
    df
    #                        Status
    #0                New,Cancelled
    #1                New,Cancelled
    #2  Cancelled,New,Cancelled,New
    

    【讨论】:

    • 我试过了,但它仍然给我和以前一样的结果,对不起。
    • @KanikaKaur 你现在可以在示例中看到它是如何工作的
    • 我相信我最初的问题可能有点误导,但我已经更新了它。希望这是有道理的。感谢您的投入
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2020-05-26
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多