问题描述
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.isnumeric
和DataFrame.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()