Python 在不使用for循环的情况下创建数据帧的子集

Python 在不使用for循环的情况下创建数据帧的子集,python,performance,pandas,Python,Performance,Pandas,我想提高这个操作的速度 df = pd.DataFrame(columns = ['eventId','total']) for event in df_events: df1 = data[data['eventId'] == event] df = pd.concat([df,df1]) df#U events是一个包含类似于“2015-11-23#54#”的元素的对象,它可以实现我想要的目的,但我想知道是否有一种不使用for循环的更快方法 一个没有回路的一行程序可以为您做

我想提高这个操作的速度

df = pd.DataFrame(columns = ['eventId','total'])
for event in df_events:
    df1 = data[data['eventId'] == event]
    df = pd.concat([df,df1])

df#U events是一个包含类似于“2015-11-23#54#”的元素的对象,它可以实现我想要的目的,但我想知道是否有一种不使用for循环的更快方法

一个没有回路的一行程序可以为您做您想做的事情:

df=data[data[“eventId”]。应用(df_事件中的lambda x:x)]
这确实比您当前的解决方案要快得多(我用非常非常小的
数据
):

data=pd.DataFrame({'eventId':{0:'2015-11-23#54#',
1: '2015-11-23#55#',
2: '2015-11-23#56#',
3: '2015-11-23#54#',
4: '2015-11-23#55#',
5: '2015-11-23#56#'},
‘总数’:{0:2,1:8,2:9,3:4,4:3,5:5})
df#U事件=['2015-11-23#54#','2015-11-23#56#']
在[14]中:%timeit df=data[data[“eventId”].apply(df_事件中的lambda x:x)]
1000个回路,最好为3个:每个回路737µs
[15]中:%%timeit df=pd.DataFrame(列=['eventId','total'])
..:对于df_事件中的事件:
..:df1=数据[数据['eventId']==事件]
..:df=pd.concat([df,df1])
....: 
100圈,最佳3圈:每个圈8.18毫秒

没有循环的单行程序可以为您做您想做的事情:

df=data[data[“eventId”]。应用(df_事件中的lambda x:x)]
这确实比您当前的解决方案要快得多(我用非常非常小的
数据
):

data=pd.DataFrame({'eventId':{0:'2015-11-23#54#',
1: '2015-11-23#55#',
2: '2015-11-23#56#',
3: '2015-11-23#54#',
4: '2015-11-23#55#',
5: '2015-11-23#56#'},
‘总数’:{0:2,1:8,2:9,3:4,4:3,5:5})
df#U事件=['2015-11-23#54#','2015-11-23#56#']
在[14]中:%timeit df=data[data[“eventId”].apply(df_事件中的lambda x:x)]
1000个回路,最好为3个:每个回路737µs
[15]中:%%timeit df=pd.DataFrame(列=['eventId','total'])
..:对于df_事件中的事件:
..:df1=数据[数据['eventId']==事件]
..:df=pd.concat([df,df1])
....: 
100圈,最佳3圈:每个圈8.18毫秒
试试这个:

df = data[data["eventId"].isin(df_events)]
试试这个:

df = data[data["eventId"].isin(df_events)]

我完全忘记了
isin()
方法,但这可能比我的答案更快,当然更可读。我完全忘记了
isin()
方法,但这可能比我的答案更快,当然更可读。