当i的行具有“ subcategory_click”且i + 1的“ add_basket_click”时,创建一个新列,其值为1。所以输入就像:
event_name
Basket_Viewed
remove_basket_click
subcategory_click
add_basket_click
subcategory_click
add_basket_click
add_basket_click
add_basket_click
subcategory_click
subcategory_click
subcategory_click
subcategory_click
add_basket_click
add_basket_click
输出将是:
event_name Flag
Basket_Viewed
remove_basket_click
subcategory_click 1
add_basket_click
subcategory_click 1
add_basket_click
add_basket_click
add_basket_click
subcategory_click
subcategory_click
subcategory_click
subcategory_click 1
add_basket_click
add_basket_click
正在寻找pythonic解决方案,因为真正的数据集非常庞大。
答案 0 :(得分:4)
使用shift
df['Flag']=(df['event_name'].eq('subcategory_click') & df['event_name'].shift(-1).eq('add_basket_click')).astype(int)
答案 1 :(得分:3)
map
''
的默认值,所以我想利用dict.get
方法使我能够返回默认值。我将其包裹在方便的lambda
中,我几乎可以使用了。map
,并且可以传递多个序列(对于被映射的可调用对象的每个参数,一个序列)*
上下文中使用[]
将map
返回值解压缩到列表中tup = ('subcategory_click', 'add_basket_click')
def fn(x, y): return {tup: 1}.get((x, y), '')
df.assign(Flag=[*map(fn, df.event_name, df.event_name.shift(-1))])
event_name Flag
0 Basket_Viewed
1 remove_basket_click
2 subcategory_click 1
3 add_basket_click
4 subcategory_click 1
5 add_basket_click
6 add_basket_click
7 add_basket_click
8 subcategory_click
9 subcategory_click
10 subcategory_click
11 subcategory_click 1
12 add_basket_click
13 add_basket_click