使用python从pandas数据框创建项目集

问题描述

我有一个数据框,其中有102377行,如下所示:

Queries
        term                     timestamp
        ...
        queryA                   2018-09-27 18:26:47
        queryB                   2018-09-27 18:26:52
        2547                     2018-09-27 18:26:58
        queryX                   2018-09-28 14:29:49
        queryP                   2018-09-28 14:30:00
        2157                     2018-09-28 14:30:01
        queryA                   2018-09-29 10:14:15
        queryY                   2018-09-29 10:14:19
        queryX                   2018-09-30 12:20:40
        queryP                   2018-09-30 12:22:00
        queryA                   2018-09-30 12:22:01
        queryU                   2018-09-30 12:26:08
        13324                    2018-09-30 12:30:00
        ...

我想在数据框中创建术语的项目集。为此,我要进行以下操作:我从上一个术语开始,如果该术语是数字,则应创建一个新的项目集。如果之前的术语不是数字,并且时间增量小于10分钟,则该术语属于项目集。最后应该看起来像这样:

itemsets
 index    terms
 0        13324; queryU; queryA; queryP; queryX
 1        2157; queryP; queryX
 2        2547; queryB; queryA

解决方法

我们可以尝试使用Series.str.isnumericDataFrame.pivot_table

df2 = df[::-1]
new_df = df2.pivot_table(index=df2['term'].str.isnumeric().cumsum(),values='term',aggfunc='; '.join)
print(new_df)

                                                   term
term                                                   
1     13324; queryU; queryA; queryP; queryX; queryY;...
2                                  2157; queryP; queryX
3                                  2547; queryB; queryA

我们也可以使用

 pd.to_numeric(df2['term'],errors='coerce').notna().cumsum()

代替Series.str.isnumeric