我的问题:我有一个pandas数据帧,特别是我需要处理的一列包含由(“:”)分隔的值,在某些情况下,“:”之间的某些值可以是value =值,并且可以出现在字符串的开头/中间/结尾。当我们遍历行时,字符串的长度可以在每个单元格中不同,例如
clickstream['events']
1:3:5:7=23
23=1:5:1:5:3
9:0:8:6=5:65:3:44:56
1:3:5:4
我有一个包含这些数字的查找值的文件,例如
event_no,description,event
1,xxxxxx,login
3,ffffff,logout
5,eeeeee,button_click
7,tttttt,interaction
23,ferfef,click1
需要输出:
clickstream['events']
login:logout:button_click:interaction=23
click1=1:button_click:login:button_click:logout
是否有一种pythonic方式查找这些单独的值并替换为与event
行对应的event_no
列,如输出中所示?我有数百个事件,并试图找到一个聪明的方法来做到这一点。如果我有一个值,pd.merge
会完成这个诀窍,但是我很难弄清楚如何处理这些值并且忽略字符串中的“= value”部分
答案 0 :(得分:1)
编辑以忽略Dict中缺少的键:
import pandas as pd
EventsDict = {1:'1:3:5:7',2:'23:45:1:5:3',39:'0:8:46:65:3:44:56',4:'1:3:5:4'}
clickstream = pd.Series(EventsDict)
#Keep this as a dictionary
EventsLookup = {1:'login',3:'logout',5:'button_click',7:'interaction'}
def EventLookup(x):
list1 = [EventsLookup.get(int(item),'Missing') for item in x.split(':')]
return ":".join(list1)
clickstream.apply(EventLookup)
由于您使用的是完整的DF而不仅仅是系列,请使用:
clickstream['events'].apply(EventLookup)
Output:
1 login:logout:button_click:interaction
2 Missing:Missing:login:button_click:logout
4 login:logout:button_click:Missing
39 Missing:Missing:Missing:Missing:logout:Missing...