如何将重复模式分类?

时间:2019-05-15 10:24:00

标签: python jupyter-notebook

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

这将与以下格式放在同一容器中:新建,新建,新建,已取消,已取消,新建,新建,已填充。

原始数据如下所示:

originalData

按每个OrderID分组一次:

Grouped By 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

1 个答案:

答案 0 :(得分:0)

要删除连续的重复项,请使用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